ASOS - проверка токена не работает при наличии отдельного сервера авторизации и сервера ресурсов

Я пытаюсь побудить сервер OpenID Connect (предоставление учетных данных пароля владельца ресурса) к ASOS этим сообщением. Все отлично работает, когда у меня есть и сервер авторизации, и сервер ресурсов в одном приложении. Но когда я разделяю их на два приложения (но на одном компьютере), сервер ресурсов не может проверить токен и возвращает токен доступа недействителен.

Я скачал исходный код AspNet.Security.OAuth.Validation исследовать проблему, и она возвращается null Вот

Вот некоторые журналы с сервера авторизации:

    info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1] Запрос на запуск HTTP/1.1 POST http://localhost:5000/connect/token application/x-www-form-urlencoded; charset=UTF-8 77
    info: AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerMiddleware[0] Запрос токена был успешно извлечен из HTTP-запроса: {
            "grant_type": "password",
            "username": "UserLogin",
            "password": "[удалено по соображениям безопасности]",
            "scope": "offline_access"
          }. информация: AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerMiddleware [0] Запрос токена был успешно проверен.
    trce: AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerMiddleware[0] Была запущена операция входа: sub: 123, username: UserLogin; [.scopes, ["email","profile","offline_access"]], [.resources, ["resource_server"]].
    dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[37] Чтение данных из файла 'C:\Users\User1\AppData\Local\ASP.NET\DataProtection-Keys\key-********-****-****-****-64bb57db1c3b.xml.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[18] Найден ключ {********-****-****-****-64bb57db1c3b}.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[13] С учетом ключа {******** - **** - **** - **** - 64bb57db1c3b} с датой истечения срока действия 2017-09-27 16:44:49Z в качестве ключа по умолчанию.
    dbug: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor[51] Расшифровка секретного элемента с помощью Windows DPAPI.
    dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.CngCbcAuthenticatedEncryptorDescriptor[4] Открытие алгоритма CNG "AES" от провайдера "(ноль)" с режимом цепочки CBC.
    dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.CngCbcAuthenticatedEncryptorDescriptor[3] Открытие алгоритма CNG 'SHA256' из провайдера '(null)' с помощью HMAC.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[2] Использование ключа {******** - **** - **** - **** - 64bb57db1c3b} в качестве ключа по умолчанию.
    trce: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector[31] Выполнение операции защиты для ключа {******** - **** - **** - **** - 64bb57db1c3b} с целями ('C:\Users\User1\ Documents\visual studio 2017\Projects\OpenIdDictSample\Aka.OpenIdConnectServer', 'OpenIdConnectServerHandler', 'AccessTokenFormat', 'ASOS').
    trce: AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerMiddleware[0] новый маркер доступа был успешно создан с использованием заданного формата данных: CfDJ8NSKICBGwihOm75ku1fbHDtG4usEbfF-mLGaJcGGFEPQJLb36rfHqCTJ3Clu_SCBRHlaZ_B7s3pxNfUqS9fPfjtjjEH1KKmkiV6gvakRYf0Iof32BVddUUPgd7sEDrB0fET91pIDJT9WwsPx653viw5tFyvrztsSD5CYAOQZjm1werRcVPuvwRhXUQb_9Vbba52tqj8y7WbOjk78Hl17knbwSz4C70vwlRU5pL_Bp41R4vEEKwtm_VMQ_u1kSBKM5KjOh6OKdbDJ9jOhyh4RpNbvGN25ZskzByi8ndKRW3dmajWYyf-0cj6-4MEE5Hocd47te8C-haYIxEUb7tcQ-JTItknIiE1sk6W7zHlhLg3nprE2Ct4mvKi11G7Kvd1W4u-UmEvL1NesjVFNKpNJVdEaK2I8mcNzJLU69ZnM4poRrLqEqD__cHa8nCFgPtE9L0Jyo6IyFwc7NZ2sXz7y7lPfJ9Q3Pu1W_t0lOGBte5uKHfJZpiOYaqKrAwdJSpULLK52iKoCNhRYxOSdq__DNJs; sub: 123, имя пользователя: UserLogin; [.scopes, ["email","profile","offline_access"]], [.resources, ["resource_server"]], [.issued, пт, 30 июня 2017 09:13:29 GMT], [.expires, Пт, 30 июня 2017 г. 10:13:29 GMT], [.token_id, e27cbb46-d1ea-4576-8803-dddc001b3fc8], [.audiences, ["resource_server"]].
    trce: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector[31] Выполнение операции защиты для ключа {******** - **** - **** - **** - 64bb57db1c3b} с целями ('C:\Users\User1\documents\visual studio 2017\Projects\OpenIdDictSample\Aka.OpenIdConnectServer, OpenIdConnectServerHandler, RefreshTokenFormat, ASOS).
    trce: AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerMiddleware[0] новый маркер обновления был успешно создан с использованием заданного формата данных: CfDJ8NSKICBGwihOm75ku1fbHDtcKlYz_IbJiNmiW_tfu19E7p5BIO9xE0b2qu8mYWw-zD7wCWB1F5Fx548L4FARrsJwlJls1AkK2GrqXjV0krH6me_btsSAxM9trrFCUL2ZrXkm2sStZ6DUcbf_cSNFh-YxXft-gbLGV11THAINTb8K9-v_fkeXq7aN8Qgu7zJfhON1ehflLwZ-DXZwW_S9assqx8f7oe-n5gTzOO6PjEyO5g0YMJ1SY7X-sMO1MKjn03vZxPB0ecT0l8NXB89vGhW7kZnoEaL1NwmSTiEOYMatwrkURPBgb2YLnpiu7sYAD04HxsicoLaQTDbc8ZJyWUJ7guLl6Mp2HLhZG_wLQM9REC_QeZX8eDn8aqSOiGKZeLF4G7A5y369VIZ0RPASdTpEsAHSE8ws0RB18jap-75bM_aAi3w3-PlfnY7ySnDYm3xkF1ImyBcph2XF6R8-imdAXhQG-tTAYd2FKw4msaWCPcnX5CxYlo-alVYpd878haDvo43fCvbd2_Dc2O1wI98; sub: 123, имя пользователя: UserLogin; [.scopes, ["email","profile","offline_access"]], [.resources, ["resource_server"]], [.issued, пт, 30 июня 2017 09:13:29 GMT], [.expires, Пт, 14 июля 2017 г. 09:13:29 GMT], [.token_id, c0cf40ad-cd47-4c82-9e37-6943cda95ffc]. информация: AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerMiddleware [0] Ответ токена был успешно возвращен: {
            "resource": "resource_server",
            "scope": "профиль электронной почты offline_access",
            "token_type": "Bearer",
            "access_token": "[удалено по соображениям безопасности]",
            "expires_in": 3600,
            "refresh_token": "[удалено по соображениям безопасности]"
          }.

Вот некоторые журналы с сервера ресурсов:

    информация: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
          Запрос на запуск HTTP/1.1 GET http://localhost:5001/api/values
    trce: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector[5]
          Выполнение незащищенной операции с ключом {******** - **** - **** - **** - 64bb57db1c3b} в целях ('C: \ Users \ User1 \ Documents\visual studio 2017\Projects\OpenIdDictSample\Aka.WebApi', 'OpenIdConnectServerHandler', 'AccessTokenFormat', 'ASOS').
    dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[37]
          Чтение данных из файла 'C: \ Users \ User1 \ AppData \ Local \ ASP.NET \ DataProtection-Keys \ key - ******** - **** - **** - **** - 64bb57db1c3b.xml.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [18]
          Найден ключ {******** - **** - **** - **** - 64bb57db1c3b}.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver [13]
          С учетом ключа {******** - **** - **** - **** - 64bb57db1c3b} с датой окончания срока действия 2017-09-27 16: 44: 49Z в качестве ключа по умолчанию.
    dbug: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor [51]
          Расшифровка секретного элемента с помощью Windows DPAPI.
    dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.CngCbcAuthenticatedEncryptorDescriptor [4]
          Открытие алгоритма CNG 'AES' от провайдера '(ноль)' с режимом цепочки CBC.
    dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.CngCbcAuthenticatedEncryptorDescriptor [3]
          Открытие алгоритма CNG 'SHA256' от провайдера '(ноль)' с помощью HMAC.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider [2]
          Использование ключа {******** - **** - **** - **** - 64bb57db1c3b} в качестве ключа по умолчанию.
    информация: AspNet.Security.OAuth.Validation.OAuthValidationMiddleware[7]
          Носитель не был аутентифицирован. Сообщение об ошибке: аутентификация не удалась, потому что токен доступа был недействительным.

1) Что не так с моим сервером ресурсов?

2) Как настроить сервер ресурсов на другом компьютере (особенно для подписи / проверки токена и шифрования / дешифрования)?

1 ответ

Решение

Как настроить сервер ресурсов на другом компьютере (особенно для подписи / проверки токена и шифрования / дешифрования)?

Необходимо убедиться, что набор ключей (содержащий мастер-ключи, полученные из ASP.NET Core Data Protection для создания ключей шифрования и проверки) правильно синхронизирован и совместно используется как сервером авторизации, так и сервером (-ами) ресурсов. Процедура описана здесь: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview.

Вот пример того, как это можно сделать с помощью общей папки:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
}

Вам также необходимо настроить два приложения на использование одного и того же "дискриминатора приложений":

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
        .SetApplicationName("Your application name");
}
Другие вопросы по тегам