認証コードと Azure AD B2C (クライアント側の oidc-client) を使用して Angular アプリの認証を設定しようとしましたが、Angular から次のエラーが発生します。
B2C 監査ログを確認したところ、次のエラー メッセージが見つかりました。
クライアントは、機密許可を利用する際に client_secret を送信する必要があります。
クライアント側の構成は次のとおりです。
const settings = {
stsAuthority: 'https://supportodqqcdev.b2clogin.com/supportodqqcDev.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_SignUpSignInOdqPlatine',
clientId: '8447df5b-35a0-40a7-944f-5dcce87a2193',
clientRoot: 'https://localhost:4200',
scope: 'openid https://supportodqqcDev.onmicrosoft.com/platineclientdev/read',
};
this.userManager = new UserManager({
authority: settings.stsAuthority,
client_id: settings.clientId,
redirect_uri: `${settings.clientRoot}/signin-callback`,
scope: settings.scope,
response_type: 'code',
post_logout_redirect_uri: `${settings.clientRoot}/signout-callback`,
automaticSilentRenew: true,
silent_redirect_uri: `${settings.clientRoot}/assets/signin-silent-callback.html`,
});
上記の構成を切り替えてローカル IdentityServer インスタンスを使用すると、すべてが期待どおりに動作します。
これをどこで、どのように調査すればよいか教えていただけますか?
ベストアンサー1
私もあなたとまったく同じ問題を抱えていましたが、解決することができました。
AD は PKCE 用にまだ構成されていないため、client_secret を要求しています。特定のリダイレクト URL に PKCE を使用することを AD に伝えるには、そのタイプを から に設定する必要があります'Web'
。'Spa'
これはマニフェストで行うことができます。
replyUrlsWithType
マニフェストでプロパティを検索し、 .../signin-callback
URL を探します。そのタイプを に変更すれば'Spa'
、問題は解決するはずです。
例えば。:
"replyUrlsWithType": [
{
"url": "http://localhost:8080/signin-callback",
"type": "Spa"
},
]
構成された URL は認証ページから消えますが、問題ありません -> マニフェストにはまだ存在します。MS チームはこの新しいタイプに取り組んでいます。
また、アプリケーションをパブリック クライアントとしてマークしていることを確認してください。
詳細については、私の回答をご覧ください:Active Directory は PKCE による認証コード フローをサポートしていないのですか?