Я пытаюсь защитить свой веб-интерфейс API (.net core 2.2) с помощью Azure Ad, используя неявный поток.
Я зарегистрировал свое приложение в Azure AD с помощью портала Azure> Azure Active Directoy> Регистрация приложений> Регистрация нового приложения:
Имя = MyWebApi
Тип приложения = Веб-приложение / API
URL для входа = http://localhost:55000
После создания этого приложения я открыл его файл манифеста и изменил oauth2AllowImplicitFlow с false на true .
Это все, что я сделал для регистрации приложения на портале Azure.
Затем я вызвал следующий URL из моего браузера Chrome, чтобы получить access_token:
https://login.microsoftonline.com/MY-AD-TENANT-GUID/oauth2/v2.0/authorize?client_id=MY-REGISTERED-APP-GUID&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A55000&scope=openid&response_mode=fragment
ответ на вызов вышеуказанного URL:
http://localhost:55000/#access_token=MY-ACCESS-TOKEN&token_type=Bearer&expires_in=3600&scope=profile+openid+email+00000003-0000-0000-c000-000000000000%2fUser.Read&session_state=b2be972a-cfbc-49f1-bfc0-6c93f6c87d02
когда я передаю MY-ACCESS-TOKEN в качестве токена на предъявителя в заголовке авторизации моему веб-API (.net core 2.2), я получаю следующее исключение:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10511: Ошибка проверки подписи. Пробовали ключи: «Microsoft.IdentityModel.Tokens.X509SecurityKey, KeyId: N-lC0n-9DALqwhuHYnHQ63GeCXc».
Затем я попытался вручную проверить подпись:
когда я вставляю MY-ACCESS-TOKEN в https://jwt.io/ заголовок:
{
"typ": "JWT",
"nonce": "AQABAAAAAACEfexXxjamQb3OeGQ4Gugvm6YdOT-bkA0IPllKMt06-J8If5AQ075TVCav94X_ZYcEYKaPneqdJcqYry-Z4XjX0eMN_fiJX_8wXe9D2b6eRiAA",
"alg": "RS256",
"x5t": "N-lC0n-9DALqwhuHYnHQ63GeCXc",
"kid": "N-lC0n-9DALqwhuHYnHQ63GeCXc"
}
Затем я пошел по этому URL, чтобы получить открытый ключ для ребенка: N-lC0n-9DALqwhuHYnHQ63GeCXc
https://login.microsoftonline.com/common/discovery/keys
Затем я вставил следующее в качестве открытого ключа в jwt.io в проверенную подпись токена:
-----BEGIN CERTIFICATE-----
OBTAINED-PUBLIC-KEY-FROM-THE-ABOVE-URL-HERE
-----END CERTIFICATE-----
и я снова получаю Неверная подпись .
Я был в этой теме: https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/609,, но я не уверен, почему мой заголовок токена имеет значение nonce или это вообще проблема в моем случае или нет.
Есть идеи, что я здесь не так делаю?