Blazor WASM AzureAD IdentityServer приводит к AADSTS90023: общедоступные клиенты не могут отправить секрет клиента
Я пытаюсь получить IdentityServer 6 в Blazor WASM (решение, размещенное на Asp.Net), чтобы начать работу с идентификатором Microsoft, но у меня появляется сообщение об ошибке «AADSTS90023: общедоступные клиенты не могут отправить секрет клиента». Я чувствую, что перепробовал каждую конфигурацию, которую только мог придумать, но, надеюсь, я все же что-то упустил.
Конфигурация IdentityServer использует профиль SPA, который, как я считаю, подходит для моего сценария:
"IdentityServer": {
"Clients": {
"Blazor.Client": {
"ClientId": "Blazor.Client",
"ClientName": "Blazor.Client",
"Profile": "SPA",
"RedirectUri": "https://localhost:15601",
"LogoutUri": "https://localhost:15601"
}
}
}
Код конфигурации следует простейшему примеру:
.AddMicrosoftAccount(options =>
{
options.ClientId = <clientId>;
options.ClientSecret = <secret>
})
Поскольку эти фрагменты кода - в основном самый простой способ сделать это, я предполагаю, что что-то не так с моей регистрацией приложения AzureAD, но я не могу понять, что именно. Я включил манифест:
{
"id": "<id>",
"acceptMappedClaims": null,
"accessTokenAcceptedVersion": 2,
"addIns": [],
"allowPublicClient": false,
"appId": "<apiId>",
"appRoles": [],
"oauth2AllowUrlPathMatching": false,
"createdDateTime": "2021-12-10T09:21:08Z",
"certification": null,
"disabledByMicrosoftStatus": null,
"groupMembershipClaims": null,
"identifierUris": [
"api://<apiId>"
],
"informationalUrls": {
"termsOfService": null,
"support": null,
"privacy": null,
"marketing": null
},
"keyCredentials": [],
"knownClientApplications": [],
"logoUrl": null,
"logoutUrl": null,
"name": "<name>",
"oauth2AllowIdTokenImplicitFlow": false,
"oauth2AllowImplicitFlow": false,
"oauth2Permissions": [],
"oauth2RequirePostResponse": false,
"optionalClaims": null,
"orgRestrictions": [],
"parentalControlSettings": {
"countriesBlockedForMinors": [],
"legalAgeGroupRule": "Allow"
},
"passwordCredentials": [
{
"customKeyIdentifier": null,
"endDate": "2023-12-10T09:21:45.315Z",
"keyId": "<keyId>",
"startDate": "2021-12-10T09:21:45.315Z",
"value": null,
"createdOn": "2021-12-10T09:21:57.2927675Z",
"hint": "H1f",
"displayName": "<displayName>"
}
],
"preAuthorizedApplications": [],
"publisherDomain": "<publisherDomain>.onmicrosoft.com",
"replyUrlsWithType": [
{
"url": "https://localhost:15602/signin-microsoft",
"type": "Spa"
}
],
"requiredResourceAccess": [
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "<someId>",
"type": "Scope"
}
]
}
],
"samlMetadataUrl": null,
"signInUrl": null,
"signInAudience": "AzureADandPersonalMicrosoftAccount",
"tags": [],
"tokenEncryptionKeyId": null
}
Этот сценарий не поддерживается или я что-то делаю не так?
1 ответ
- Секрет клиента на самом деле должен храниться в секрете, т.е. вы не можете разместить его на веб-сайте и использовать его из общедоступного внешнего интерфейса. Дизайн потока учетных данных клиента говорит то же самое.
- Приложения Blazor webassembly называются «общедоступными приложениями» в терминах oAuth/openid.
Примечание. Согласно документам Microsoft:
Общедоступные клиенты (собственные приложения и одностраничные приложения ) не должны использовать секреты или сертификаты при погашении кода авторизации — всегда убедитесь, что ваши URI перенаправления правильно указывают тип приложения.
Поэтому попробуйте отключить требование к секрету клиента для маркеров IdP и обновления, поскольку они также не могут быть обработаны безопасным/безопасным способом.
Рекомендуется использовать код +PKCE для общедоступных клиентов, что происходит автоматически, когда вы устанавливаете для параметра response_type значение code.