从Identity Server请求用户声明和令牌的功能?

时间:2019-02-18 03:02:43

标签: asp.net-mvc asp.net-core asp.net-core-2.0 identityserver4 oidc

登录到身份服务器后检索用户声明和令牌的最佳方法是什么?

我有一个.Net Core MVC Web应用程序。我重定向到身份服务器,登录,然后重定向回我的Web应用。

然后,我想从我的应用程序请求身份服务器的用户声明和令牌。

有方法调用吗?

我遍历了教程并四处搜索,发现可以处理此行为的库(针对此问题的javascript为oidc-client-js,oidc.usermanager。对于本机c#应用程序为OidcClient),但对于c#Web应用程序则不是-我意识到也许我要的不是约定,但我仍然希望对此有任何见识。

编辑:

要详细说明,在c#Web应用程序教程(特别是教程3)中,我看不到如何从图1到图2检索声明和令牌信息。

此外,我正在尝试使用c#(而不是html)调用和处理这些对象。

图1

figure 1

图2

figure 2

谢谢

1 个答案:

答案 0 :(得分:1)

在控制器中,您可以像

那样撤消声明
 var claims = User.Claims;

获取访问令牌/ id令牌/刷新令牌:

 var accessToken = HttpContext.GetTokenAsync("access_token").Result;
 var idToken = HttpContext.GetTokenAsync("access_token").Result;
 var refreshToken = HttpContext.GetTokenAsync("access_token").Result;

要实现此目的,您需要按以下步骤在ConfigureServices中注册OIDC中间件(确保将SaveTokens设置为true):

.AddOpenIdConnect(options => {
// Set all your OIDC options...

// and then set SaveTokens to save tokens to the AuthenticationProperties
options.SaveTokens = true;
});

在“ mvc剃须刀”页面中,您可以获得以下信息:

@using Microsoft.AspNetCore.Authentication
@{
    ViewData["Title"] = "Home Page";
}

<dl>
    @foreach (var claim in User.Claims)
    {
        <dt>@claim.Type</dt>
        <dd>@claim.Value</dd>
    }

</dl>

<dt>access token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("access_token")</dd>

<dt>ID token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("id_token")</dd>

<dt>refresh token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("refresh_token")</dd>