如何通过"密码"从身份服务器4获取id_token和access_token。 grant_type?

时间:2017-01-02 03:53:41

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

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

从客户端调用TokenEndpoint的代码段

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

我的问题是,如何获得&#34; id_token&#34;以及&#34; access_token&#34;和&#34; refresh_token&#34;通过使用相同的&#34;资源所有者密码凭证&#34;流?

1 个答案:

答案 0 :(得分:13)

  

如何获得&#34; id_token&#34;以及&#34; access_token&#34;和&#34; refresh_token&#34;通过使用相同的&#34;资源所有者密码凭证&#34;流?

你不是。

在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不指定资源所有者流 - 仅授权服务器上的交互式登录(如代码或隐式流)。所以[换句话说,]没有身份令牌 - 只能访问令牌。