标签: refresh-token

令牌过期后在 signalR 中更新令牌

我通过 SignalR 从客户端(角度 9)和服务器(asp.net core 3.1)创建实时连接,并通过 JWT 令牌授权集线器,如下代码:

 private createConnection() {
      this.hubConnection = new HubConnectionBuilder().withUrl(`${this.appConfig.hubEndpoint}/Hubs`,
        { accessTokenFactory: () => jwtToken })
        .withAutomaticReconnect()
        .build();
  }

  private startConnection(): void {
    this.hubConnection
      .start()
      .then(() => {
        this.connectionIsEstablished = true;
        this.connectionEstablished.emit(true);
      })
      .catch(err => {
        console.log('Error while establishing connection, retrying...');
      });
  }
Run Code Online (Sandbox Code Playgroud)

在令牌过期之前,这一切正常。根据我的研究,在收到带有刷新令牌的新令牌后,应停止先前的连接,并使用新令牌创建新连接。现在我想知道我该怎么做?我必须经常检查令牌吗?或者应该通过向服务器发送每个请求来解决这个问题?

signalr asp.net-core refresh-token angular

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

如何从 Firebase.auth.currentUser Android Kotlin 获取刷新令牌

我正在绞尽脑汁地思考如何从中获取刷新令牌,FirebaseAuth但似乎找不到如何获取刷新令牌。

在 iOS 上,相当于Auth.auth().currentUser?.refreshToken. 非常感谢任何帮助。

android jwt kotlin firebase-authentication refresh-token

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

Google API 刷新令牌已过期或被撤销

我正在使用 Google Ads php 库 ( https://github.com/googleads/googleads-php-lib ) 来管理我自己的Google 广告帐户,按照 Google 的说明进行操作 ( https://developers.google.com/adwords/ api/docs/guides/first-api-call

(实际上我已经这样做很多年了,没有出现任何问题,但我最近转而使用 Google Cloud Platform 中的另一个项目,因此我必须更新我的凭据并获取新的刷新令牌

为了获得新的刷新令牌,我运行了名为的 php 脚本GetRefreshTokenWithoutIniFile.php(它允许我授予离线访问权限并检索新的刷新令牌,我将其存储在文件中auth.ini以供将来使用)。

在我看到此错误之前,刷新令牌会持续几天:

{
    "error" : "invalid_grant",
    "error_description" : "Token has been expired or revoked."
}
Run Code Online (Sandbox Code Playgroud)

我多年来一直使用上述方法,并且刷新令牌从未过期。然而,现在它似乎每隔几天就会过期。我当然没有“用完”刷新令牌(我只请求一个),并且用户没有撤​​销访问权限(用户是)。因此,这些类似的答案对我没有帮助:

还有更多想法吗?

oauth google-api refresh-token google-ads-api

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

如何实施刷新令牌轮换?

如果我正确理解了刷新令牌轮换,这意味着每次我们请求新的访问令牌时,我们也会获得一个新的刷新令牌。如果多次使用刷新令牌 - 我们会使某个用户之前使用的所有刷新令牌失效,并且用户必须再次执行身份验证过程。

  1. 这是否意味着我们需要将所有刷新令牌(所有旧的)存储在数据库中?

  2. 难道我们不能简单地存储最后一个刷新令牌(尚未使用),并且对于每个获取新访问令牌的请求,我们将检查请求中发送的刷新令牌是否在数据库中,如果那么,我们将创建一个新的访问和刷新令牌并覆盖数据库中的旧刷新令牌,以便旧的刷新令牌不能用于获取新令牌?

  3. 这样的刷新令牌应该存在多久?

node.js oauth-2.0 jwt refresh-token

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

JWT刷新令牌策略

我在博客(此处)中看到有关使用 JWT 在 React 中进行身份验证的内容,此设置:访问令牌到期时间为 15 分钟,刷新令牌到期时间为 1 个月;每 10 分钟客户端调用/refreshToken端点一次,检查刷新令牌是否仍然有效(否则用户将看到登录屏幕)。

在服务器上,/refreshToken端点正确检查刷新令牌是否未过期,刷新令牌有效负载中具有 ID 的用户仍然存在且有效(即:传递的刷新令牌存在于其刷新令牌数组中)。如果一切正常,则会生成一个新的访问令牌,并与响应一起发回。

到目前为止,一切都很好。但是,在返回响应之前,也会生成一个新的刷新令牌,并将旧的刷新令牌替换到用户的刷新令牌数组中...我认为这种策略是有缺陷的,因为这样用户就永远不会看到的登录过期,即使在之后刷新令牌(本例中为一个月)将过期...

我确实做了一些测试(将 1 个月值降低到 30 分钟),并且实际上用户授权永远不会过期...强制注销用户删除其刷新令牌数组显然效果很好,但我希望刷新时会注销令牌按年龄过期。

我询问我的理解是否正确(服务器上的refreshToken端点不应刷新刷新令牌,而应仅刷新访问令牌),或者我是否错过了某些内容。

@Ghero 评论后更新:我明白你的观点...但是如果不更新令牌的过期时间,为什么要刷新令牌呢?
然而,博客的代码用于更新刷新令牌:

    const jwt = require("jsonwebtoken");

    exports.getRefreshToken = (user) => {
      const refreshToken = jwt.sign(user, process.env.REFRESH_TOKEN_SECRET, {
        expiresIn: eval(process.env.REFRESH_TOKEN_EXPIRY),
      });
      return refreshToken;
    };

    // REFRESH_TOKEN_EXPIRY is set to 30 days
Run Code Online (Sandbox Code Playgroud)

看起来总是把到期日期推迟到未来30天。这样就永远不会过期了...

javascript access-token jwt reactjs refresh-token

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

建议对应用程序进行简单的访问令牌过期处理

email我有一组纯粹用于我自己的应用程序的 API,因此当用户提供和时,我只有一个简单的 API 来创建访问令牌password

/api/access_tokenaccess_token(当email和匹配时返回password

access_token保存并与数据库sessions表中的expiry字段进行匹配,目前有效期为one week,因此用户需要在一周后重新登录。

到目前为止,它运行良好,但如果我想要拥有remember meFacebook / Twitter 应用程序的功能,这意味着用户不需要经常重新登录,我认为他们正在使用类似的方法OAuth refresh access tokens

由于我没有使用这些 OAuth 东西,鉴于我当前的设计和设置,实现相同功能的最简单且安全的方法是什么?

security authentication access-token jwt refresh-token

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

何时将刷新令牌传递给API

我试图访问授权服务器,当用户提供用户名和密码时,该服务器会发出短期访问令牌和更长时间的刷新令牌.

  1. 客户端是否应该在每次调用API时都与访问令牌一起传递刷新令牌,或者客户端只有在从API接收到访问令牌已过期的错误代码时才会传递刷新令牌?
  2. 刷新令牌过期后,将哪种类型的错误代码传递回客户端?这意味着客户端需要通过再次传递用户名和密码来请求新的访问令牌.

access-token asp.net-web-api2 refresh-token

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

IdentityServer4-如何使用mysql.data将刷新令牌存储到数据库中?

我是IdentityServer4的新手。我读到我需要实现一个IPersistedGrantStore将刷新令牌存储到PersistedGrants数据库中的表中。

当本机应用程序请求新的访问令牌时,IdentityServer日志如下:"refresh_token" grant with value: "{value}" not found in store

那是因为我正在使用持久授权存储的内存版本。因此,我需要在PersistedGrant表中存储刷新令牌。

因此,在我的startup.cs中,添加了以下行:

builder.Services.AddScoped<IPersistedGrantStore, PersistedGrantStore>();
Run Code Online (Sandbox Code Playgroud)

IPersistedGrantStore.cs

public interface IPersistedGrantStore
{        
    Task StoreAsync(CustomPersistedGrant grant);

    Task<CustomPersistedGrant> GetAsync(string key);

    Task<IEnumerable<CustomPersistedGrant>> GetAllAsync(string subjectId);        
}
Run Code Online (Sandbox Code Playgroud)

所以我有一个CustomPersistedGrant.cs

public class CustomPersistedGrant
{
    public string Key { get; set; }

    public string Type { get; set; }

    public string SubjectId { get; set; }

    public string ClientId { get; set; }

    public DateTime CreationTime { …
Run Code Online (Sandbox Code Playgroud)

persistence identityserver4 refresh-token

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

Angular 5 HttpClient拦截器JWT刷新令牌无法捕获401并重试我的请求

我正在尝试实现401响应的catch,并尝试在令牌刷新后基于Angular 4 Interceptor重试请求获取刷新令牌 .我试图实现同样的事情,但我从来没有能够重试该请求,我真的不确定这是否是应用刷新令牌策略的最佳方法.这是我的代码:

@Injectable()
export class AuthInterceptorService implements HttpInterceptor {
 public authService;
 refreshTokenInProgress = false;
 tokenRefreshedSource = new Subject();
 tokenRefreshed$ = this.tokenRefreshedSource.asObservable();
 constructor(private router: Router, private injector: Injector) { }
 authenticateRequest(req: HttpRequest<any>) {
 const token = this.authService.getToken();
 if (token != null) {
 return req.clone({
 headers: req.headers.set('Authorization', `Bearer ${token.access_token}`)
 });
 }
 else {
 return null;
 }
 }
 refreshToken() {
 if (this.refreshTokenInProgress) {
 return new Observable(observer => {
 this.tokenRefreshed$.subscribe(() => {
 observer.next();
 observer.complete();
 });
 });
 } else …
Run Code Online (Sandbox Code Playgroud)

interceptor jwt refresh-token angular-httpclient angular5

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

不从身份验证代码返回刷新令牌

我正在使用来自节点的googleapis程序包来获取刷新令牌,并从前端传递的身份验证代码访问令牌,但是每次遇到以下错误时,我都会这样做。

  {      
      error: 'redirect_uri_mismatch',
      error_description: 'Bad Request' 
  }
Run Code Online (Sandbox Code Playgroud)

我知道当我们与控制台中作为回调URL传递的URL不匹配时,会出现此错误。 https://console.cloud.google.com/apis/credentials

但我已经在控制台中设置了正确的URL。仍然不确定代码有什么问题。

使用/auth从传递令牌front-endnode-server

const {
    google
} = require("googleapis");
const OAuth2 = google.auth.OAuth2;
var bodyParser = require('body-parser')

const express = require('express');
const app = express();
app.use(bodyParser.json());

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});


app.use('/tokenCallback', (req, res) => {
    console.log(req);
    res.send('An alligator approaches!');
});

app.post('/auth', (req, res) => {
    runProcess(req.body.auth);
    res.send('An alligator approaches!');
});

app.listen(4300);

function runProcess(code) {

    const …
Run Code Online (Sandbox Code Playgroud)

oauth google-authentication node.js google-apis-explorer refresh-token

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