首页 > 解决方案 > 如何获取要在身份验证请求正文中返回的属性?

问题描述

我正在建立一个新的 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);

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

{
  "token_type":"Bearer",
  "access_token":"CfDJ...etc",
  "expires_in":1209600
}

显然,我缺少一些秘密开关,可以将其注入AuthenticationProperties响应正文。它是什么?

标签: c#asp.net-coreopenid-connect

解决方案


您需要重写ApplyTokenResponseOpenIdConnectServerProvider显式添加属性。我认为默认情况下不会返回它们(它们只是根据需要提供参考)。

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

推荐阅读