标签: refresh-token

使用 IHttpClientFactory 使用外部 API 时存储访问和刷新令牌的位置。网络核心

我使用 IHttpClientFactory 发送请求并接收从我的 Web API 到使用 Net Core 2.2 的外部 API 的 HTTP 响应。

用于向 API 发送请求的访问令牌和刷新令牌已存储在 appsettings.json 中。当请求返回 403 或 401 错误时,我会动态获取一个新令牌并将其添加到请求的标头中。

但是如何使用新的访问和刷新令牌更新 appsettings.json 以便将其用于后续请求。

是否有比 appsettings.json 更好的方法来存储访问和刷新令牌?

token asp.net-core refresh-token httpclientfactory

2
推荐指数
1
解决办法
3170
查看次数

在数据库中存储和维护 JWT 刷新令牌的最佳策略?

我有一个移动应用程序,它通过后端实现 JWT 身份验证。访问令牌的生命周期很短(1 小时),并且不会存储在后端。现在是刷新令牌:

  1. 如果刷新令牌过期,则意味着用户将定期注销,从业务角度来看,这是非常不希望的,它可能会损害用户保留率。有没有办法在不削弱安全性的情况下避免这种情况,例如使刷新令牌“永恒”?

  2. 存储和清理刷新令牌表以防止未使用令牌累积的最佳方法是什么?假设我有以下表结构:user_id, device_id, refresh_token。如果策略是刷新令牌永不过期,则使它们失效的唯一方法是当用户注销时。但是,用户也可以删除应用程序、丢失或损坏设备,或者device_id出于任何原因进行更改。我能想到的一种解决方案是设置一个refreshed_at时间戳,允许在几个月不使用后使令牌失效。还有其他已知的技巧吗?

  3. 假设我在刷新访问令牌时除了刷新令牌之外还使用共享秘密字符串,我的理解是否正确:如果所有 3 个令牌(访问令牌、刷新令牌和共享秘密)都被泄露,我对此无能为力?API 调用的最佳实践是什么refresh

authentication oauth jwt refresh-token

2
推荐指数
1
解决办法
4311
查看次数

何时刷新访问令牌

我的问题是确定何时刷新访问令牌。

我读过,我应该在每次请求之前刷新新的访问令牌,但它在其他地方说不建议这样做。所以我的问题是我是否应该在每次请求之前刷新访问令牌,或者发送请求并在收到 401 未经授权状态后刷新访问令牌并重试对指定资源的请求。

oauth-2.0 openid-connect refresh-token

2
推荐指数
2
解决办法
1853
查看次数

刷新从 Google Identity Services / React App 收到的访问令牌

我现在在处理从 Google Identity Services 收到的访问令牌时遇到了麻烦。

有关此案的一些细节。我有全栈应用程序,后端基于Spring/Webflux/Hibernate-Reactive,前端基于React。我正在使用 Google Identity Services 的 google 登录功能以及此反应库@react-oauth/google

我正在使用成功登录后收到的“凭据”进行后端访问。一切都按预期工作,只是成功登录后响应中没有刷新令牌。令牌在 1 小时后过期,必须提示用户重新登录才能收到新令牌,这太可怕了!

那么,如何刷新这个令牌,有什么想法吗?

我在谷歌方面找不到更多信息,这就是我在这里写下的原因。

access-token jwt reactjs google-identity refresh-token

2
推荐指数
1
解决办法
1005
查看次数

Podio Oauth - 刷新令牌寿命

我目前正在研究Podio集成,我偶然发现了一些文章,这些文章没有给出明确的答案,刷新资本是否会自动失效,在这种情况下获取新刷新令牌的确切流程是什么.

文章:

Podio刷新令牌到期 - 它不会过期(从用户名中有Podio的人回答,最近)

https://help.podio.com/hc/en-us/community/posts/206669587-Get-new-refresh-token - 它过期了,你把它作为响应的一部分而不是rly?有一些讨论没有结论

我问这个是因为我使用了很多服务和OAuth实现,但它是第一次刷新令牌实际上变得无效.那么如果28天过去了那么用户必须重新认证?或者只是令牌无效但"授权"仍然存在?我不得不说它很混乱,因为我习惯于接近grant ==刷新令牌,但我理解它与OAuth规范有关.另外我们只想在db中存储刷新令牌.我很想测试它,但我不想等待28天.

文档没有明确说明刷新令牌的生命周期是什么.

我喜欢Podio的某个人给出明确的答案.刷新令牌是否过期,只有在完全不活动(没有api调用)或只是固定数量时,以及在什么情况下(不活动或时间过去),获取刷新令牌的确切流程是什么,它是否需要用户重新认证?

oauth podio refresh-token

1
推荐指数
1
解决办法
188
查看次数

Identity Server 4 - 在数据库中保存刷新令牌

我在 .Net Core 2.0 中使用 IdentityServer4 并且我成功生成了访问令牌和刷新令牌。我只需要能够在生成时在服务器端“看到”刷新令牌,以便我可以将其保存在数据库中以用于某些特定目的。

在服务器上生成刷新令牌时,如何访问它的值?

c# identityserver4 refresh-token asp.net-core-2.0

1
推荐指数
1
解决办法
3309
查看次数

当访问令牌过期并且我们需要再次登录以继续作为普通用户时,我们如何保持用户登录

我在代理中使用Nuxt-axios模块。

对于错误处理,我在

插件/axios.js

export default function({ $axios, __isRetryRequest, store, app, redirect , payload , next}) {
  $axios.onRequest(config => {
  if (app.$cookies.get('at') && app.$cookies.get('rt') && config.url != '/post_login/') {
      config.headers.common['Authorization'] = `Bearer ${app.$cookies.get('at')}`;
    }
  });

  $axios.onResponseError(err => {
    const code = parseInt(err.response && err.response.status)

    let originalRequest = err.config;

    if (code === 401) {
      originalRequest.__isRetryRequest = true;

      store
        .dispatch('LOGIN', { grant_type: 'refresh_token', refresh_token: app.$cookies.get('rt')})
        .then(res => {
          originalRequest.headers['Authorization'] = 'Bearer ' + app.$cookies.get('at');
          return app.$axios(originalRequest);
        })
        .catch(error => {
          console.log(error); …
Run Code Online (Sandbox Code Playgroud)

javascript axios refresh-token vuejs2 nuxt.js

1
推荐指数
1
解决办法
5920
查看次数

ZOHO CRM 未获得刷新令牌作为响应

我开发的应用程序iOS,并android在我正在整合ZOHO CRM。我使用 OAuth2.0 进行身份验证,之后我使用 REST API 来获取“刷新令牌”,但我只得到“访问令牌”。有下面的代码来获取令牌。我怎样才能获得刷新令牌?

self.getCodeFromCRM(client_id: Client_ID,
                            clientSecret: secID,
                            authURL: "https://accounts.zoho.in/oauth/v2/auth",
                            accessURL: "offline",
                            responseType: "code",
                            callBackURL: "zohoapp://",
                            scope: "ZohoCRM.modules.contacts.all",//ZohoCRM.users.ALL
                            state: "code")
Run Code Online (Sandbox Code Playgroud)

获取调用此 API 的代码以获取刷新和访问令牌后。

func getZohoReferenceToken()
    {
        let headers = [
            "Content-Type": "application/x-www-form-urlencoded",
            "User-Agent": "PostmanRuntime/7.13.0",
            "Accept": "*/*",
            "Cache-Control": "no-cache",
            "Postman-Token": "88ebde59-240a-4e52-8ff9-bb7384eba0dd,9a1d5ea1-a5c0-490e-b3b5-1884e335ef86",
            "Host": "accounts.zoho.in",
            "accept-encoding": "gzip, deflate",
            "content-length": "254",
            "Connection": "keep-alive",
            "cache-control": "no-cache"
        ]

        let postData = NSMutableData(data: "client_id=\(Client_ID)".data(using: String.Encoding.utf8)!)
        postData.append("&client_secret=\(secID)".data(using: String.Encoding.utf8)!)
        postData.append("&redirect_uri=zohoapp://".data(using: String.Encoding.utf8)!)
        postData.append("&code=\(code)".data(using: String.Encoding.utf8)!)
        postData.append("&grant_type=authorization_code".data(using: String.Encoding.utf8)!)
        postData.append("&prompt=consent".data(using: String.Encoding.utf8)!)

        let request = …
Run Code Online (Sandbox Code Playgroud)

crm zoho oauth-2.0 swift refresh-token

1
推荐指数
1
解决办法
659
查看次数

如何以及为什么使用refresh_token处理jwt令牌过期,还有其他选择吗?

我有两场战争:app.war(struts web 应用程序)和rest.war(经典的rest api)。

app.war通过 jwt 令牌进行访问rest.war,该令牌在用户登录成功后生成app.war

当用户使用时,需要通过使用jwt token从jsp发送ajax调用来a.war获取一些数据。rest.wara.war

jwt令牌的过期时间是15分钟,而会话超时时间app.war是1小时。

但是,如果 jwt 令牌过期,即使弹出要求用户重新登录,用户仍然可以访问app.war

有一种选择:使用access_tokenrefresh_token,如果access_token过期,则使用refresh_token获取新的access_tokenrefresh_token

对于这种方法,我有一些疑问:

首先,为什么使用两个令牌?因为我认为它们是相同的,只是refresh_token寿命比 access_token并使用refresh_token新的更长access_token,所以为什么不只是access_token将其过期时间设置得更长呢?

其次access_token,生成和的算法是否相同refresh_token,只是它们的过期时间不同?

第三,如果客户端使用令牌执行多个 api 调用(同步和异步),如果其中一个调用返回 401(令牌过期),如何处理?

java authentication oauth-2.0 jwt refresh-token

1
推荐指数
1
解决办法
5815
查看次数

承诺不等待解决或拒绝-javascript-ReactJs

我使用我的React Spa应用程序进行令牌身份验证。在执行CRUD程序之前,我要检查刷新令牌的到期时间。如果刷新令牌有效,则没问题,但如果无效,我将发送旧的刷新令牌,并在发送原始数据之前从服务器接收新的刷新和访问令牌。到此为止没有问题。

问题在于刷新机制完成了,而没有等待服务器的响应。

currentUser存储令牌值。我检查null控制以获取令牌,然后如果到期时间无效,则发送旧的刷新令牌。

此时,该函数将返回,而无需等待authenticationService.createAccessTokenByRefreshToken函数的响应。函数必须等待此函数,因为如果访问令牌无效,则需要新的令牌。

为什么函数不等待就结束?

export function authHeader() {
    var authorization = {
        Authorization: ''
    };

    var currentUser = authenticationService.currentUserValue;

    if (currentUser && currentUser.token) {
        const refreshToken = currentUser.refreshToken;
        const expiration = currentUser.expiration;
        var moment = require('moment');
        var now = moment();

        if (moment(now).isAfter(expiration)) {
            authenticationService.createAccessTokenByRefreshToken(refreshToken).then((res) => {
                authorization.Authorization = `Bearer ${res.data.token}`;
                return Promise.resolve(authorization);
            });
        }
        else {
            authorization.Authorization = `Bearer ${currentUser.token}`;
            return Promise.resolve(authorization);
        }

        //return { Authorization: `Bearer ${currentUser.token}` };
    } else {
        return Promise.reject(authorization);
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs refresh-token

0
推荐指数
1
解决办法
106
查看次数

使用组合网络 ios 刷新令牌

这个问题很简单:

我的代码:

        return urlSession.dataTaskPublisher(for: urlRequest)
        .tryMap { (data: Data, response: URLResponse) -> Data in
            //TODO: hide loader
            GRP.hideLoader()
            if let httpURLResponse = response as? HTTPURLResponse {
                if !(200...299 ~= httpURLResponse.statusCode) {
                    var error = NetworkingError(errorCode: httpURLResponse.statusCode)
                    if let json = try? JSONSerialization.jsonObject(with: data, options: []) {
                        error.jsonPayload = json
                    }
                    throw error
                }
            }
            
            if withErrorMessage, let errorCheckModel = try? JSONDecoder().decode(ErrorModel.self, from: data)
            {
                if let statusIsSuccess = errorCheckModel.success, let errorMessage = errorCheckModel.message, !errorMessage.isEmpty
                {
                    if(!statusIsSuccess)
                    {
                        print(urlString)
                        GRP.showToast(failure: true, …
Run Code Online (Sandbox Code Playgroud)

ios swift refresh-token swiftui combine

0
推荐指数
1
解决办法
1286
查看次数