Подтвердить что ты не робот

AspNet Identity 2: настройка ответа на конечную точку OAuth

Я успешно реализовал свой пользовательский OAuthAuthorizationServerProvider. Но когда я вхожу в систему и получаю токен, мой клиент не имеет представления о ролях пользователя, претензиях и т.д.

В настоящее время я добавил контроллер webapi, чтобы вернуть список основных претензий, но я не очень доволен этим.

При запросе токена текущий ответ выглядит следующим образом:

{
    access_token: "qefelgrebjhzefilrgo4583535",
    token_type: "bearer",
    expires_in: 59
}

Q > Как заставить его вернуть что-то вроде следующего фрагмента?

{
    access_token: "qefelgrebjhzefilrgo4583535",
    token_type: "bearer",
    expires_in: 59,
    user: {
        name: 'foo',
        role: 'bar'
    }
}

Мой прогресс:

В документации OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext) говорится:

Вызывается на завершающем этапе успешного запроса конечной точки Token. Приложение может выполнить этот вызов, чтобы сделать окончательную модификацию формулы изобретения используется для выдачи токенов доступа или обновления. Этот вызов также может быть использован чтобы добавить дополнительные параметры ответа в конечную точку Token json тела ответа.

Я не смог найти какой-либо пример настройки ответа, а исходный код asp-net Identity еще не выпущен, поэтому я довольно застрял.

4b9b3361

Ответ 1

Возможно, вы ищете переопределение метода TokenEndpoint OAuthAuthorizationServerProvider.

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

Ответ 2

Я считаю, что вам нужно переопределить класс TokenEndpointResponse в OAuthAuthorizationServerProvider:

    public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
    {
        context.AdditionalResponseParameters.Add("Key","Value");
        return base.TokenEndpointResponse(context);
    }