c# - 如何获取要在身份验证请求正文中返回的属性?
问题描述
我正在建立一个新的 ASP.NET API 项目,从现有项目中复制基础知识。对于身份验证,我设置了一个继承自OpenIdConnectServerProvider
. 身份验证在HandleTokenRequest()
. 但除此之外access_token
,我还想在成功登录时为客户端返回一些额外的数据。从现有项目中复制,我在中执行了以下操作HandleTokenRequest()
:
var data = new Dictionary<string, string>
{
{"userId", user.UserId.ToString()},
{"userTypeId", ((int) user.Type).ToString(CultureInfo.InvariantCulture)}
};
var properties = new AuthenticationProperties(data);
var ticket = new AuthenticationTicket(new ClaimsPrincipal(identity), properties, context.Scheme.Name);
context.Validate(ticket);
但是,出于某种原因,我没有在响应正文中返回userId
and 。userTypeId
这是我在回复中得到的:
{
"token_type":"Bearer",
"access_token":"CfDJ...etc",
"expires_in":1209600
}
显然,我缺少一些秘密开关,可以将其注入AuthenticationProperties
响应正文。它是什么?
解决方案
您需要重写ApplyTokenResponse
以OpenIdConnectServerProvider
显式添加属性。我认为默认情况下不会返回它们(它们只是根据需要提供参考)。
public override Task ApplyTokenResponse(ApplyTokenResponseContext context)
{
if (context.Ticket != null)
{
foreach (var property in context.Ticket.Properties.Items)
{
context.Response.AddParameter(property.Key, property.Value);
}
}
return Task.CompletedTask;
}
推荐阅读
- mysql - 如何使用此查询将 $ 和 % 添加到列中的数字?
- r - 将上标添加到 R 中的 ggbarplot y 轴
- windows - Powershell:获取过去 90 天在 Windows 上的登录次数
- sql - 为什么我的所有 SQL 查询都为 Django 使用嵌套 MPTT 子级的“Prefetch_related”重复了 4 次?
- javascript - 未找到模块,无法解析“React”中的 serviceWorker
- python - Python TypeError:'bytearray'对象的描述符'append'不适用于列表对象
- angular - Angular:在 app.module.ts 中声明的组件在其他组件中找不到
- routes - Gatsby 客户端路由是否需要方括号?
- regex - Groovy Regex 过滤掉模式,除非它在引号内
- mysql - SQLSTATE [42000]:语法错误或访问冲突:在 Laravel 中使用 groupBy 和 hasManyThrough 关系时出现 1055