如何在 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);

但是,出于某种原因,我没有在响应正文中返回 userIduserTypeId。这是我在回复中得到的内容:

{
  "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;
}