如何在 Authenticate 请求的正文中获取 return 的属性?
How to get properties to return in the body of an Authenticate request?
我正在建立一个新的 ASP.NET API 项目,从现有项目复制基础知识。为了进行身份验证,我设置了一个继承自 OpenIdConnectServerProvider
的 class。 HandleTokenRequest()
中的身份验证工作正常。但是除了 access_token
之外,我还想 return 在客户端成功登录时提供一些额外的数据。从现有项目复制,我在 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
和 userTypeId
。这是我在回复中得到的内容:
{
"token_type":"Bearer",
"access_token":"CfDJ...etc",
"expires_in":1209600
}
显然我遗漏了一些秘密开关,它将 AuthenticationProperties
注入响应主体。这是什么?
您需要覆盖 OpenIdConnectServerProvider
中的 ApplyTokenResponse
以显式添加属性。我认为默认情况下不会返回它们(它们只是根据需要提供以供参考)。
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;
}
我正在建立一个新的 ASP.NET API 项目,从现有项目复制基础知识。为了进行身份验证,我设置了一个继承自 OpenIdConnectServerProvider
的 class。 HandleTokenRequest()
中的身份验证工作正常。但是除了 access_token
之外,我还想 return 在客户端成功登录时提供一些额外的数据。从现有项目复制,我在 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
和 userTypeId
。这是我在回复中得到的内容:
{
"token_type":"Bearer",
"access_token":"CfDJ...etc",
"expires_in":1209600
}
显然我遗漏了一些秘密开关,它将 AuthenticationProperties
注入响应主体。这是什么?
您需要覆盖 OpenIdConnectServerProvider
中的 ApplyTokenResponse
以显式添加属性。我认为默认情况下不会返回它们(它们只是根据需要提供以供参考)。
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;
}