以编程方式代表用户请求访问令牌

时间:2018-05-29 13:12:01

标签: c# asp.net asp.net-mvc asp.net-core identityserver4

我希望以登录方式以编程方式获取当前用户的访问令牌。我已经弄清楚如何使用客户端凭据获取令牌但我无法弄清楚如何代表用户获取令牌。

以下是我尝试使用客户端凭据获取的内容:

var client = new TokenClient("http://localhost:34240/connect/token", "client", "secret", AuthenticationStyle.PostValues);
var token = client.RequestClientCredentialsAsync(scope: "api").GetAwaiter().GetResult();

我是否需要使用acr_values将主题值添加到请求中?如果是,我该如何将其添加到返回的访​​问令牌?

或者我是否需要使用code授权类型?如果是,我如何以编程方式请求授权代码?

或者还有另一种我失踪的方式吗?

我很感激任何帮助。我检查过IdentityServer样本,但看不到任何相关内容。

1 个答案:

答案 0 :(得分:1)

查看Resource owner password授权示例。基本上你做的几乎和你目前一样,但是你需要设置你的客户端使用client credentials,而不是ResourceOwnerPassword授权,然后你已经显示的代码,更改为:

var client = new TokenClient("http://localhost:34240/connect/token", "client", "secret", AuthenticationStyle.PostValues);

var token = client.RequestResourceOwnerPasswordAsync("<username>", "<password>", scope: "api").GetAwaiter().GetResult();

通过此,您将代表用户获取令牌。但请记住:

  

规范建议仅对“受信任”(或遗留)应用程序使用资源所有者密码授予。一般来说,当您想要对用户进行身份验证并请求访问令牌时,通常会更好地使用其中一个交互式OpenID Connect流程。