【问题标题】:Function to request user claims and token from Identity Server?从身份服务器请求用户声明和令牌的功能?
【发布时间】:2019-07-11 09:40:36
【问题描述】:

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

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

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

是否有方法调用来执行此操作?

我浏览了教程并四处搜索并找到了处理此行为的库(oidc-client-js、oidc.usermanager 用于处理此问题的 javascript。OidcClient 用于本机 c# 应用程序)处理此行为,但不适用于 c# web 应用程序 - 所以我意识到也许我所要求的不是约定,但我仍然希望对此有任何见解。

编辑:

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

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

图一

图2

谢谢

【问题讨论】:

  • fail to see how claims and token information become retrievable from from figure 1 to figure 2 User.Claims 登录后为空是什么意思?
  • UserManager 用于访问 Identity 表,仅在 IdentityServer 中可用。客户端和 Api 无权访问 IdentityServer 数据库。相反,他们使用范围和端点(如 UserInfo 端点)从 IdentityServer 请求信息(登录时)。成功登录后,客户端会收到一个访问令牌,其中包含声明集合形式的请求信息,可以在 User.Identity 中找到。
  • 阅读有关如何配置客户端的文档:docs.identityserver.io/en/latest/quickstarts/…
  • @NanYu 我只是没有看到单击“安全”和突然访问用户声明之间的逻辑联系。不过,玩了一天之后,我想我对支持机制有了更好的理解。

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


【解决方案1】:

在控制器中,您可以像

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

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

 var accessToken = HttpContext.GetTokenAsync("access_token").Result;
 var idToken = HttpContext.GetTokenAsync("id_token").Result;
 var refreshToken = HttpContext.GetTokenAsync("refresh_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 razor 页面中,你可以得到信息:

@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>

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 2018-05-15
    • 1970-01-01
    • 2016-09-22
    • 2019-07-28
    • 1970-01-01
    • 2016-07-17
    • 2021-01-21
    • 2019-01-04
    相关资源
    最近更新 更多