Переопределение TokenEndPoint в AspNet.Security.OpenIdConnect.Server

вопрос, связанный с этим сообщением здесь: Настройте конечную точку сервера авторизации.

Используя приведенный выше пример, я могу получить токен. ранее можно было получить дополнительную информацию, перегружая

public override Task TokenEndpoint(OAuthTokenEndpointContext context)
        {
            foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
            {
                context.AdditionalResponseParameters.Add(property.Key, property.Value);
            }

            return Task.FromResult<object>(null);
        }

как вы достигаете этого в текущей реализации

public override Task TokenEndpoint(TokenEndpointContext context){
}

Спасибо!


person BHR    schedule 03.12.2015    source источник


Ответы (1)


Лучше всего напрямую использовать событие ApplyTokenResponse для обновления полезной нагрузки JSON, возвращаемой клиентскому приложению. В отличие от AdditionalResponseParameters, он позволяет добавлять или удалять практически все: объекты, массивы, строки, целые числа...

Вот как это сделать:

public override Task ApplyTokenResponse(ApplyTokenResponseContext context)
{
    // Only add the custom parameters if the response is not a token error response.
    if (string.IsNullOrEmpty(context.Error))
    {
        context.Response["custom-property-1"] = "custom-value";

        context.Response["custom-property-2"] = JArray.FromObject(new[]
        {
            "custom-value-1",
            "custom-value-2"
        });
    }

    return Task.FromResult(0);
}
person Kévin Chalet    schedule 04.12.2015
comment
Merci beaucoup @Pinpoint!. Еще одна вещь, о которой я хотел вас спросить, это то, что я продолжал получать ошибку сервера 500, когда пытался получить доступ к ресурсам с помощью метода http.get() из моего углового клиента. очень сложно отлаживать, но я знаю, что это происходит из-за app.UseJwtAuthentication. есть идеи, почему он выбрасывает 500, не давая мне возможности отреагировать? - person BHR; 04.12.2015
comment
Па-де-куа! На самом деле ответ 500 — это ошибка, которая не была исправлена ​​для RC1, но теперь исправлена ​​в ночных сборках: github.com/aspnet/Security/issues/411. Чтобы определить, почему промежуточное ПО JWT не работает, можно включить ведение журнала: docs.asp .net/en/latest/fundamentals/logging.html. К вашему сведению, основная причина сбоя связана с тем, что параметр resources не используется: stackoverflow.com/a/32801010/542757 . - person Kévin Chalet; 04.12.2015
comment
К вашему сведению, мы прекратим использование токенов доступа JWT по умолчанию в следующей бета-версии: github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/. - person Kévin Chalet; 04.12.2015
comment
когда будет доступна следующая бета? потому что промежуточное ПО для проверки — это именно то, что мне нужно. Так как мой сервер ресурсов и сервер авторизации это одно и то же. - person BHR; 04.12.2015
comment
Пока нет точной даты, есть еще много вещей, которые нужно сделать для бета-версии 5 (и некоторые из них открыты для участия ;)). Вы можете следить за прогрессом здесь: github.com /aspnet-contrib/AspNet.Security.OpenIdConnect.Server/. - person Kévin Chalet; 04.12.2015
comment
Обновлено для использования нового имени события, используемого ASOS beta5 (для ASP.NET Core RC2). - person Kévin Chalet; 19.05.2016