我正在尝试使用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;流?
答案 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也适合您。
OAuth 2.0资源所有者密码授予允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌。
OpenID Connect不指定资源所有者流 - 仅授权服务器上的交互式登录(如代码或隐式流)。所以[换句话说,]没有身份令牌 - 只能访问令牌。