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 ответ

  1. Секрет клиента на самом деле должен храниться в секрете, т.е. вы не можете разместить его на веб-сайте и использовать его из общедоступного внешнего интерфейса. Дизайн потока учетных данных клиента говорит то же самое.
  2. Приложения Blazor webassembly называются «общедоступными приложениями» в терминах oAuth/openid.

Примечание. Согласно документам Microsoft:

Общедоступные клиенты (собственные приложения и одностраничные приложения ) не должны использовать секреты или сертификаты при погашении кода авторизации — всегда убедитесь, что ваши URI перенаправления правильно указывают тип приложения.

  • Поэтому попробуйте отключить требование к секрету клиента для маркеров IdP и обновления, поскольку они также не могут быть обработаны безопасным/безопасным способом.

  • Рекомендуется использовать код +PKCE для общедоступных клиентов, что происходит автоматически, когда вы устанавливаете для параметра response_type значение code.

Справка: Платформа удостоверений Майкрософт и поток кода авторизации OAuth 2.0 — Платформа удостоверений Майкрософт | Документы Майкрософт

Другие вопросы по тегам