【问题标题】:How to get id_token along with access_token from identityserver4 via "password" grant_type?如何通过“密码”授权类型从身份服务器4获取id_token和access_token?
【发布时间】:2017-05-16 05:25:24
【问题描述】:

我正在尝试使用 identityserver4 构建身份提供者应用程序;目前,我正在使用“资源所有者密码凭据”流程,它从令牌端点返回 access_token 和 refresh_token。

从客户端调用 TokenEndpoint 的代码片段

var tokenClient = new TokenClient(<TokenEndpoint>, <ClientId>, <ClientSecret>);           
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync(<UserName>, <password>, <Scopes>);

我的问题是,如何使用相同的“资源所有者密码凭据”流程获取“id_token”以及“access_token”和“refresh_token”?

【问题讨论】:

    标签: asp.net-core openid-connect identityserver4


    【解决方案1】:

    如何使用相同的“资源所有者密码凭据”流程获取“id_token”以及“access_token”和“refresh_token”?

    你没有。

    在 IdentityServer4 中,资源所有者密码凭证流仅提供访问令牌。如果您还需要 id 令牌,请使用授权代码流程、隐式代码流程或混合流程。

                                           access_token   id_token   refresh_token
    
    Resource Owner Password Credentials        yes           -           yes
    
    Authorization Code                         yes          yes          yes 
    
    Implicit Flow                              yes          yes           - 
    

    由于您需要所有三种令牌类型,并且您似乎正在使用服务器端代码,因此授权代码流程最适合。 Some kinds of Hybrid Flow 也适合您。

    From the docs:

    OAuth 2.0 资源所有者密码授权允许客户端将用户名和密码发送到令牌服务并获取代表该用户的访问令牌。

    From a GitHub issue:

    OpenID Connect 不指定资源所有者流程 - 仅在授权服务器上进行交互式登录(如代码或隐式流程)。所以 [换句话说,] 没有身份令牌 - 只有访问令牌。

    【讨论】:

    • 谢谢@Shaun。还有其他方法可以从令牌端点获取 access_token 和 id_token 吗?
    • @codeninja.sj 是的。您可以使用其中一种 OpenID Connect 流。在您的情况下,授权代码流程似乎是最佳候选者。但是,如果您正在构建基于 Web 浏览器的应用程序,您将需要 Implicit Flow。
    • 授权码流程只接受“用户名”和“密码”,不接受“client_id”和“client_secret”; “隐式代码流。”接受“client_id”和“client_secret”,但不接受“username”和“password”。但我必须传递所有这些参数才能获取令牌。有没有其他更好的方法来实现这一点?
    • @codeninja.sj 根据您使用服务器端代码的问题,我的感觉是您想要授权代码流。我认为您对它接受的内容有误。授权码流程采用客户端 ID 和客户端密码。
    • 让我试试授权码流!谢谢你的建议:)
    猜你喜欢
    • 2017-05-19
    • 2023-04-09
    • 2021-05-16
    • 2018-07-22
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多