【问题标题】:Generate JWT Refresh Token with go-oauth2/oauth2 library使用 go-oauth2/oauth2 库生成 JWT 刷新令牌
【发布时间】:2020-05-02 19:22:44
【问题描述】:

我正在使用 go 库 https://github.com/go-oauth2/oauth2 (v3) 生成 Oauth2 访问令牌。我使用以下 go 伪代码执行此操作:

jwtParams := generates.JWTAccessGenerate{
    SignedKey:    []byte(secretKey),
    SignedMethod: jwt.SigningMethodHS512,
}
manage.Manager.MapAccessGenerate(&jwtParams)

req := oauth2.TokenGenerateRequest{
    ClientID:    clientId,
    UserID:      userId,
    RedirectURI: redirectUri,
    Code:        authCode,
}

gt := oauth2.GrantType("authorization_code")
tokenInfo, _ := manage.Manager.GenerateAccessToken(gt, &req)

我得到的结果是 JWT 访问令牌,但刷新令牌不是。

access=XXXX.YYYYY                   expires=5m0s         <== JWT token - OK
refresh=YNFCZUFBWTUEXE5WJMD68W      expires=12000h0m0s   <== MY ISSUE - Not JWT

如何让这个库生成 JWT 刷新令牌?

2020 年 1 月 17 日更新:经过更多研究,我注意到许多实现不打扰刷新令牌的 JWT 表示,所以我可能也不需要这样做。我仍然想知道这个库是否可行,以供将来参考。

【问题讨论】:

    标签: go oauth-2.0


    【解决方案1】:

    存储刷新值,以后使用该刷新刷新访问令牌:

    req := oauth2.TokenGenerateRequest{
        ClientID:    clientId,
        UserID:      userId,
        RedirectURI: redirectUri,
        Code:        authCode,
    }
    req.Refresh = refresh
    req.Scope = "owner"
    rti, err := manager.RefreshAccessToken(req)
    

    您也可以调用manager.LoadRefreshToken(accessToken)从accessToken中加载RefreshToken。

    【讨论】:

    • 我们的工作流程有点不同,我们确实存储了刷新令牌,但是您的解决方案如何帮助我将 JWT 刷新令牌返回给客户端应用程序?
    猜你喜欢
    • 2015-12-13
    • 2016-01-25
    • 2017-12-25
    • 2017-04-20
    • 1970-01-01
    • 2015-09-28
    • 2017-12-13
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多