Как получить свойства, возвращаемые в теле запроса Authenticate? - PullRequest
0 голосов
/ 24 февраля 2020

Я настраиваю новый 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 и userTypeId в теле ответа. Вот что я получу в ответе:

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

Очевидно, что мне не хватает какого-то секретного переключателя, который вставит AuthenticationProperties в тело ответа. Что это?

1 Ответ

1 голос
/ 26 февраля 2020

Вам необходимо переопределить 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;
}
...