установить параметр Identityserver 'состояние' в качестве GUID для корреляции вызовов? - PullRequest
0 голосов
/ 30 мая 2019

Я хочу сопоставить все вызовы на всем протяжении Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectEvents (OnRedirectToIdentityProvider, OnAuthorizationCodeReceived и т. Д.).

Я хочу установить параметр ' state ' в OnRedirectToIdentityProvider в качестве GUID для последующей корреляции вызовов в журналах, например

 OnRedirectToIdentityProvider = async context =>
 {
    var myGuid = Guid.NewGuid().ToString();
    context.ProtocolMessage.State = myGuid;
    _log.LogInformation("OnRedirectToIdentityProvider: {0}", myGuid);

  ...
 },
 OnAuthorizationCodeReceived = async context =>
 {
     _log.LogInformation("OnAuthorizationCodeReceived: {0}", context.ProtocolMessage.State);

  ...
 },
...

В документации сказано, что identityserver отобразит значение состояния в ответе токена. http://docs.identityserver.io/en/latest/endpoints/authorize.html

Я также прочитал, что клиент отвечает за проверку этого свойства.

Вопрос:

  • Я не смог найти какой-либо конкретный ресурс о том, когда я хочу использовать свойство ' state ', , обрабатывается ли проверка автоматически промежуточным программным обеспечением, или я должен обработать проверку самостоятельно в функции обратного вызова ?

  • Существуют ли какие-либо риски безопасности, которые следует учитывать при использовании GUID в параметре 'state' ?

  • Плюсы / минусы, которые я должен рассмотреть ?

С уважением, A

1 Ответ

0 голосов
/ 31 мая 2019

Это действительный подход к использованию GUID в качестве значения свойства ProtocolMessage.State .

После установки ProtocolMessage.State в событии OnRedirectToIdentityProvider

context.ProtocolMessage.State = myGuid;

Из исходного кода выяснилось, что данные десериализуются с помощью метода StateDataFormat.Unprotect (). Я использовал это для отладки

context.Options.StateDataFormat.Unprotect("CfDJ8...yr7Rpx3DyQMwPw")

' состояние ' в запросе на самом деле является сериализованным классом AuthenticationProperties.

Класс AuthenticationProperties создается промежуточным программным обеспечением, а значение ProtocolMessage.State фактически сохраняется как AuthenticationProperties.Items ["OpenIdConnect.Userstate"] в ответе. Как упомянуто в комментарии, промежуточное ПО обрабатывает проверку состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...