Asp.net core 如何通过";从identityserver4获取id_令牌和访问_令牌;密码";格兰特?你是什么类型的?

Asp.net core 如何通过";从identityserver4获取id_令牌和访问_令牌;密码";格兰特?你是什么类型的?,asp.net-core,openid-connect,identityserver4,Asp.net Core,Openid Connect,Identityserver4,我正在尝试使用identityserver4构建一个身份提供者应用程序;目前,我正在使用“资源所有者密码凭据”流,它从令牌端点返回访问令牌和刷新令牌 从客户端调用TokenEndpoint的代码片段 var tokenClient = new TokenClient(<TokenEndpoint>, <ClientId>, <ClientSecret>); var tokenResponse = await tokenClient.Req

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

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

var tokenClient = new TokenClient(<TokenEndpoint>, <ClientId>, <ClientSecret>);           
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync(<UserName>, <password>, <Scopes>);
var-tokenClient=new-tokenClient(,);
var tokenResponse=wait tokenClient.RequestResourceOwnerPasswordAsync(,);
我的问题是,如何通过使用相同的“资源所有者密码凭据”流来获取“id\u令牌”以及“access\u令牌”和“refresh\u令牌”

如何使用相同的“资源所有者密码凭据”流获取“id\U令牌”以及“访问\U令牌”和“刷新\U令牌”

你没有

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

                                       access_token   id_token   refresh_token

Resource Owner Password Credentials        yes           -           yes

Authorization Code                         yes          yes          yes 

Implicit Flow                              yes          yes           - 
由于您需要所有三种令牌类型,并且似乎正在使用服务器端代码,因此授权代码流最适合。也会为你工作

:

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

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


谢谢@Shaun。是否有其他方法可以从令牌端点获取访问令牌和id令牌?@codennija.sj是。您可以使用一个OpenID连接流。在您的案例中,授权代码流似乎是最佳候选。但是,如果您正在构建基于web浏览器的应用程序,则需要隐式流。授权代码流只接受“用户名”和“密码”,而不接受“客户端id”和“客户端机密”;“隐式代码流。”接受“客户端id”和“客户端密码”,但不接受“用户名”和“密码”。但我必须传递所有这些参数才能获得令牌。有没有其他更好的方法来实现这一点?@codennija.sj根据您使用服务器端代码提出的问题,我的感觉是您需要授权代码流。我认为你对它所接受的东西错了。授权码流采用客户端id和客户端密码。让我尝试使用授权码流!谢谢你的建议:)