Почему я вижу «недопустимый клиент» в журналах IdentityServer4 при использовании внешнего входа в учетную запись Microsoft? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть реализация IdentityServer4, которая имеет внутреннее промежуточное ПО OIDC OpenIdConnect по умолчанию для обеспечения доступа к локальным API и поддержки внешних провайдеров входа в систему, начиная с Microsoft.Я реализовал собственный IClientStore и подключил его к промежуточному программному обеспечению с помощью

   .AddClientStore<IS4ClientStore>();

Когда внутренние неявные аутентификации OIDC-подключения IS4ClientStore.FindClientByIdAsync вызывается BuildLoginViewModelAsync, как в примере с

 _clientStore.FindEnabledClientByIdAsync(context.ClientId);

который возвращает ожидаемый IdentityServer4.Client и все аутентифицируется и т. д.

Когда я звоню внешнему провайдеру (Microsoft OAuth), он проходит через процесс аутентификации, соединяющийся с моим прилагаемым applicationid, проходит процесс утверждения Microsoftи затем Microsoft перенаправляет обратно на https://localhost:5001/signin-microsoft.

Промежуточное программное обеспечение ядра asp.net от вызывающих сервисов. AddAuthentication (). AddMicrosoftAccount (параметры) при запуске не использует мое клиентское хранилище для поиска клиентаid, он просто сообщает об ошибке:

 Request starting HTTP/1.1 GET https://localhost:5001/signin-microsoft?code=M91ae2ef1-701d-ceb4-d479-a905d3d02a4d&state=CfDJ8GGNLFmYOI9KouhmbB3NzeJ5omhARPg-YVCPW7u1aCyhnGfOx9_Nj4VL8cMIxmO48nk_8UkfB9Pv7Q7tzZZb8nsq5y26giY9fXuVyRsn5qx8a1nSX8tKFWk1uo9ongL5V0MXY6sgU6eNUEzsxgyNFz_20QLVU20y9G7jRpmxoOcpQ1s1SJx0Tu2BBlRrI840-D-jUmg1ix7xDUfmXF_rPVp6e88rzIuCfbQO4otNq2fAsm4
info: Microsoft.AspNetCore.Authentication.MicrosoftAccount.MicrosoftAccountHandler[4]
      Error from RemoteAuthentication: OAuth token endpoint failure: Status: BadRequest;Headers: Cache-Control: no-cache, no-store
      Pragma: no-cache
      Strict-Transport-Security: max-age=31536000; includeSubDomains
      X-Content-Type-Options: nosniff
      x-ms-request-id: 759b3046-cbad-489d-98c1-6e83bb390b00
      P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
      Set-Cookie: fpc=AZFdz4kBW-ZHi5twlc6DCrARHQUSAQDQZKAdWIfWCA; expires=Sat, 02-Mar-2019 08:43:04 GMT; path=/; secure; HttpOnly, x-ms-gateway-slice=prod; path=/; secure; HttpOnly, stsservicecookie=ests; path=/; secure; HttpOnly
      Date: Thu, 31 Jan 2019 08:43:04 GMT
      ;Body: {"error":"unauthorized_client","error_description":"AADSTS700016: Application with identifier '000000005D256100' was not found in the directory '9188040d-6c67-4c5b-b112-36a304b66dad'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant\r\nTrace ID: 759b3046-cbad-489d-98c1-6e83bb390b00\r\nCorrelation ID: 858c340d-7c0c-4fa9-86c2-f8417e5915f1\r\nTimestamp: 2019-01-31 08:43:04Z","error_codes":[700016],"timestamp":"2019-01-31 08:43:04Z","trace_id":"759b3046-cbad-489d-98c1-6e83bb390b00","correlation_id":"858c340d-7c0c-4fa9-86c2-f8417e5915f1"};.
fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLK7ARJEPT98", Request id "0HLK7DAJEPT98:00000005": An unhandled exception was thrown by the application.
System.Exception: An error was encountered while handling the remote login. ---> System.Exception: OAuth token endpoint failure: Status: BadRequest;Headers: Cache-Control: no-cache, no-store
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
x-ms-request-id: 759b3046-cbad-489d-98c1-6e83bb390b00
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
Set-Cookie: fpc=AZFdz4kBW-ZHi5twlc6DCrARHQUSAQDQZKAdWIfWCA; expires=Sat, 02-Mar-2019 08:43:04 GMT; path=/; secure; HttpOnly, x-ms-gateway-slice=prod; path=/; secure; HttpOnly, stsservicecookie=ests; path=/; secure; HttpOnly
Date: Thu, 31 Jan 2019 08:43:04 GMT
;Body: {"error":"unauthorized_client","error_description":"AADSTS700016: Application with identifier '000000005D256100' was not found in the directory '9188040d-6c67-4c5b-b112-36a304b66dad'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant\r\nTrace ID: 759b3046-cbad-489d-98c1-6e83bb390b00\r\nCorrelation ID: 858c340d-7c0c-4fa9-86c2-f8417e5915f1\r\nTimestamp: 2019-01-31 08:43:04Z","error_codes":[700016],"timestamp":"2019-01-31 08:43:04Z","trace_id":"759b3046-cbad-489d-98c1-6e83bb390b00","correlation_id":"858c340d-7c0c-4fa9-86c2-f8417e5915f1"};
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at IdentityServer4.Hosting.FederatedSignOut.AuthenticationRequestHandlerWrapper.HandleRequestAsync() in C:\local\identity\server4\IdentityServer4\src\Hosting\FederatedSignOut\AuthenticationRequestHandlerWrapper.cs:line 38
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at IdentityServer4.Hosting.BaseUrlMiddleware.Invoke(HttpContext context) in C:\local\identity\server4\IdentityServer4\src\Hosting\BaseUrlMiddleware.cs:line 36
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 476.3734ms 500

Должен ли я использовать реализацию AddMicrosoftAccount из IdentityServer4?

1 Ответ

0 голосов
/ 01 февраля 2019

Спасибо Jim & Mackie, чтобы указать мне правильное направление (я думал, что это из-за проблемы реализации пользовательского магазина на моей стороне)

Когда я проверял, у меня был правильный клиент и секрет наНа странице https://apps.dev.microsoft.com/#/appList я заметил ссылку для перехода на портал Azure для управления моими приложениями.(https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/applicationsListBlade) Когда я перешел по этой ссылке, предыдущие приложения, которые я не показывал, поэтому я просто создал новое приложение и получил новый ApplicationId (который теперь был путеводителем, а не через портал) иСекрет, подключил это к вызову .AddMicrosoftAccount, и я смог пройти процесс аутентификации через вход в Microsoft и получить маркер для завершения аутентификации на моем сервере.

Я предполагаю, что некоторый процент приложений, которые былидобавленные через сайт apps.dev.microsoft.com не находятся в хранилище резервных копий Microsoft по завершении процесса аутентификации, приложения могут находиться во внешнем запросе и позволять страницам авторизации найти ваше приложение и предоставить страницу согласия, нозатем при выдаче токена сторона Microsoft ищет другое хранилище и не находит приложение по ApplicationId, предоставленному на странице apps.dev.microsoft.com. Таким образом, решение, по крайней мере в моем случае, заключалось в создании приложениявместо этого в лазурном портале.

...