登录到身份服务器后检索用户声明和令牌的最佳方法是什么?
我有一个.Net Core MVC Web应用程序。我重定向到身份服务器,登录,然后重定向回我的Web应用。
然后,我想从我的应用程序请求身份服务器的用户声明和令牌。
有方法调用吗?
我遍历了教程并四处搜索,发现可以处理此行为的库(针对此问题的javascript为oidc-client-js,oidc.usermanager。对于本机c#应用程序为OidcClient),但对于c#Web应用程序则不是-我意识到也许我要的不是约定,但我仍然希望对此有任何见识。
编辑:
要详细说明,在c#Web应用程序教程(特别是教程3)中,我看不到如何从图1到图2检索声明和令牌信息。
此外,我正在尝试使用c#(而不是html)调用和处理这些对象。
图1
图2
谢谢
答案 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>