Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有没有办法实现自动更新过期AccessToken? #440

Closed
GitHubChrisChen8035 opened this issue Jan 19, 2024 · 27 comments
Closed

有没有办法实现自动更新过期AccessToken? #440

GitHubChrisChen8035 opened this issue Jan 19, 2024 · 27 comments

Comments

@GitHubChrisChen8035
Copy link

目前Bearer开头的Token只有20几天有效期,到期后需要登录openai在开发者工具中查找Token,然后在ChatGPT-WEB项目中手动去更新,有没有办法自动更新呢?

@haojie06
Copy link

在accesstoken过期后的一顿时间内用sessiontoken去获取session就能拿到新的accesstoken

@0x676e67
Copy link
Owner

累了,实际上服务端不可能什么都做的

@clcc2019
Copy link

自己写个脚本拿token去认证,认证失败就拿密码生成新的token或者刷新token

@unsciorg
Copy link
Contributor

累了,实际上服务端不可能什么都做的

撑住,我到现在没摸出来你是咋过的CF。。。

@0x676e67
Copy link
Owner

累了,实际上服务端不可能什么都做的

撑住,我到现在没摸出来你是咋过的CF。。。

https://github.com/gngpp/reqwest-impersonate

@CHN-STUDENT
Copy link

CHN-STUDENT commented Jan 20, 2024

想过用 python+selenium 在个人终端获取完然后弄个 API 自动更新服务器的。

大概思路如下, 但俺太菜也没时间折腾:

一台支持带 GUI 的 windows 主机,安装 chrome ,支持浏览器访问 chatgpt,账号在这个机器登陆后;定时使用 selenium 获取 token,获取 token 给部署 ninja ,cws 主机 比较,token不一致可以重启更新。

@haojie06
Copy link

想过用 python+selenium 在个人终端获取完然后弄个 API 自动更新服务器的。

大概思路如下, 但俺太菜也没时间折腾:

一台支持带 GUI 的 windows 主机,安装 chrome ,支持浏览器访问 chatgpt,账号在这个机器登陆后;定时使用 selenium 获取 token,获取 token 给部署 ninja ,cws 主机 比较,token不一致可以重启更新。

其实你可以直接查看jwt payload里面的过期时间,在jwt过期之后用session token去请求 /auth/refresh_session,就能拿到新的access token了。

@unsciorg
Copy link
Contributor

简单粗暴每15天更新一遍token即可,项目里的登录接口和refreshtoken接口都已经给写好了

@GitHubChrisChen8035
Copy link
Author

简单粗暴每15天更新一遍token即可,项目里的登录接口和refreshtoken接口都已经给写好了

具体能说说怎么调用吗,我是Docker方式部署的chatgpt-web和ninja

@GitHubChrisChen8035
Copy link
Author

用的DockerCompose部署在一台美国服务器上,可以大陆网络访问使用GPT,下面是配置文件

version: '3'

services:
app:
image: chenzhaoyu94/chatgpt-web:latest
restart: unless-stopped
ports:
- 3002:3002
environment:
OPENAI_ACCESS_TOKEN: "XXXXX"
TIMEOUT_MS: 100000
API_REVERSE_PROXY: "http://ninja:7999/backend-api/conversation"
#API_REVERSE_PROXY: "http://go-chatgpt-api:8080/chatgpt/backend-api/conversation"
depends_on:
- ninja

ninja:
container_name: ninja
image: ghcr.io/gngpp/ninja:latest
ports:
- 7999:7999
environment:
- TZ=Asia/Shanghai
- PROXIES=socks5://warp:10000
restart: unless-stopped
command: run --disable-direct
depends_on:
- warp

warp:
container_name: warp
image: ghcr.io/gngpp/warp:latest
restart: unless-stopped

其中上面的OPENAI_ACCESS_TOKEN: "XXXXX"需要差不多半个月手动去更新,有点麻烦,不知道有什么好办法?ninja项目说明里,我看有http的调用,可以获取accessToken,这个具体要怎么做?

@k0baya
Copy link

k0baya commented Jan 23, 2024

如果支持RefreshToken作为API Key直接调用ChatGPT-To-API,就能解决这个问题了...有大佬能实现一下吗?

@GitHubChrisChen8035
Copy link
Author

如果支持RefreshToken作为API Key直接调用ChatGPT-To-API,就能解决这个问题了...有大佬能实现一下吗?

对,就是这个意思,可能还需要加一个token过期判断

@OsemDing
Copy link

这种自己发送请求去更新token的方式,只适合client是自己写的吧。例如我在A电脑发送请求去更新token,对B电脑是没用的。很多人的需要是,A电脑发送请求更新token或服务器自动更新,B、C、D电脑通过固定API key直接可以调用。

@GitHubChrisChen8035
Copy link
Author

这种自己发送请求去更新token的方式,只适合client是自己写的吧。例如我在A电脑发送请求去更新token,对B电脑是没用的。很多人的需要是,A电脑发送请求更新token或服务器自动更新,B、C、D电脑通过固定API key直接可以调用。

我是通过境外服务器搭了一个GPT网站,只要在服务端实现定时更新token,其实就能解决问题。现在的情况是我不了解如何使用ninja项目http的API,比如它文档里有提到:
“登录: /auth/token,表单option可选参数,默认为web登录,返回AccessToken与Session;参数为apple/platform,返回AccessToken与RefreshToken”
具体要如何去调用,才可以返回获得token。

@unsciorg
Copy link
Contributor

登录: /auth/token,表单option可选参数,默认为web登录,返回AccessToken与Session;参数为apple/platform,返回AccessToken与RefreshToken
Web登录默认返回一个名为: __Secure-next-auth.session-token的cookie,客户端只需要保存这个cookie,调用/auth/refresh_session也可以刷新AccessToken

文档都已经写好了,你可以使用你喜欢的任何语言来完成刷新accessToken的步骤

@GitHubChrisChen8035
Copy link
Author

登录: /auth/token,表单option可选参数,默认为web登录,返回AccessToken与Session;参数为apple/platform,返回AccessToken与RefreshToken
Web登录默认返回一个名为: __Secure-next-auth.session-token的cookie,客户端只需要保存这个cookie,调用/auth/refresh_session也可以刷新AccessToken

文档都已经写好了,你可以使用你喜欢的任何语言来完成刷新accessToken的步骤

能否举个简单例子呢,我不是很了解API的使用方法

@0x676e67
Copy link
Owner

0x676e67 commented Jan 24, 2024

如果支持RefreshToken作为API Key直接调用ChatGPT-To-API,就能解决这个问题了...有大佬能实现一下吗?

这个需要AccessToken保存在服务端或者客户端(客户端前提是会保存cookie)

@GitHubChrisChen8035
Copy link
Author

如果支持RefreshToken作为API Key直接调用ChatGPT-To-API,就能解决这个问题了...有大佬能实现一下吗?

这个需要AccessToken保存在服务端或者客户端(客户端前提是会保存cookie)

我用的是ChatGPT-WEB的开源项目,其实就是一个前端页面,然后Docker配置中,需要填入有效AccessToken,只是每隔半个月左右需要手动去更替,比较麻烦,看到您的项目有获取/更新token的API,就是不知道如何去调用?

@heurainbow
Copy link

session token

同不搞前端的,只是不理解如何发起请求,能否提供任一语言的示例

@0x676e67
Copy link
Owner

对于这种功能,我的意见是不太愿意用服务端存储用户敏感信息。有需求可以自己写一个程序实现映射access token和自动刷新

@0x676e67
Copy link
Owner

如果支持RefreshToken作为API Key直接调用ChatGPT-To-API,就能解决这个问题了...有大佬能实现一下吗?

这个需要AccessToken保存在服务端或者客户端(客户端前提是会保存cookie)

我用的是ChatGPT-WEB的开源项目,其实就是一个前端页面,然后Docker配置中,需要填入有效AccessToken,只是每隔半个月左右需要手动去更替,比较麻烦,看到您的项目有获取/更新token的API,就是不知道如何去调用?

回头我会写一个详细的API调用刷新

@heurainbow
Copy link

另外我发现有har文件失效的情况,会导致问题和回答一模一样的情况,手动更新har文件就可以解决。har文件能自动更新么

@0x676e67
Copy link
Owner

另外我发现有har文件失效的情况,会导致问题和回答一模一样的情况,手动更新har文件就可以解决。har文件能自动更新么

你现在更新最新版

@GitHubChrisChen8035
Copy link
Author

如果支持RefreshToken作为API Key直接调用ChatGPT-To-API,就能解决这个问题了...有大佬能实现一下吗?

这个需要AccessToken保存在服务端或者客户端(客户端前提是会保存cookie)

我用的是ChatGPT-WEB的开源项目,其实就是一个前端页面,然后Docker配置中,需要填入有效AccessToken,只是每隔半个月左右需要手动去更替,比较麻烦,看到您的项目有获取/更新token的API,就是不知道如何去调用?

回头我会写一个详细的API调用刷新

非常感谢&期待

@0x676e67
Copy link
Owner

https://github.com/gngpp/ninja/blob/main/doc/authorization.md

@nankaine
Copy link

https://github.com/gngpp/ninja/blob/main/doc/authorization.md

你好,请教一下 Login的时候。
报错了
{"code":400,"msg":"Invalid arkose token (No solver available or solver is invalid)"}

目前toml的配置

bind = "0.0.0.0:15000"
concurrent_limit = 65535
timeout = 600
connect_timeout = 60
tcp_keepalive = 60
no_keepalive = false
pool_idle_timeout = 90
enable_direct = true
cookie_store = true
fastest_dns = true
disable_webui = false
enable_file_proxy = false
enable_arkose_proxy = true
arkose_gpt3_experiment = true
arkose_gpt3_experiment_solver = true
arkose_solver = "yescaptcha"```

这个情况,是否需要添加har呢?

@nankaine
Copy link

https://github.com/gngpp/ninja/blob/main/doc/authorization.md

你好,请教一下 Login的时候。 报错了 {"code":400,"msg":"Invalid arkose token (No solver available or solver is invalid)"}

目前toml的配置

bind = "0.0.0.0:15000"
concurrent_limit = 65535
timeout = 600
connect_timeout = 60
tcp_keepalive = 60
no_keepalive = false
pool_idle_timeout = 90
enable_direct = true
cookie_store = true
fastest_dns = true
disable_webui = false
enable_file_proxy = false
enable_arkose_proxy = true
arkose_gpt3_experiment = true
arkose_gpt3_experiment_solver = true
arkose_solver = "yescaptcha"```

这个情况,是否需要添加har呢?

我看到这个了。。#461 我先自己琢磨一下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants