ADFS 4.0 で断続的に発生する OpenID Connect ログイン エラー

ADFS 4.0 で断続的に発生する OpenID Connect ログイン エラー

Azure でホストされている Windows 2016 ADFS 4.0 ファーム (SQL Server ではなく WID データベース) があります。

私たちは新しい OpenID Connect アプリケーションを使用しており、ADFS を使用して AD からユーザー プロファイルを認証および入力したいと考えています。アプリケーションは JWT 構成に共有シークレットを使用しています。

これは、テスト環境 (単一ノード ファーム) では非常に簡単に構成できました。

同じアプリケーション サーバーを運用 ADFS サーバー上に構成したとき、最初は成功していましたが、ログイン後に断続的にログイン エラーが発生し始めました。ADFS にログインすると、コールバック URL に送信されます。これにより、ログイン ページにリダイレクトされ、そのページには次のエラー メッセージが表示されたモーダル ダイアログ ボックスが表示されます。 Call to IdP failed to get identity

数回更新を押すと、最終的にはアプリケーションへのアクセスが許可されます。接続不良で Fiddler トレースを実行すると、次のエラーが見つかりました。

{"errorCodeString":"camAuthUnrecoverable",
"messages":[{"messageString":"Call to IdP failed to get identity. Status 400\nError: invalid_grant\nError description: MSIS9612: The authorization code received in 'code' parameter is invalid. "}],
"promptInfo":{"captions":["Call to IdP failed to get identity"]}}

ADFS イベント ビューアーで次のようなメッセージを含むエラーが見つかりました:

Encountered error during OAuth token request. 

Additional Data 

Exception details: 
    Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthAccessTokenInvalidAuthorizationCodeException: 
MSIS9252: The authorization code received is invalid. 
No artifact found for the specified authorization code: '//redacted//'. 
The cause may be that artifact has timed out, or the authorization code was replayed, or the authorization code is invalid. 
   at Microsoft.IdentityServer.Web.Protocols.OAuth.OAuthToken.OAuthTokenProtocolHandler.RedeemAccessToken(OAuthAccessTokenRequestContext tokenContext)

いずれの場合も、何度かリロードするとログインできました。

ファーム内のノード数を 1 に減らすと、問題は消えたように見えましたが、ノードを再度追加すると再び発生しました。

他の人も openid connect/oAuth2 アプリの設定時にこの問題に遭遇したことがありますか? どのように解決しましたか?

SAML2 アーティファクト解決は WID を使用する ADFS 4.0 ではサポートされていませんが、同じ問題が OpenID Connect に当てはまるという情報はありません。ただし、これは問題に関する私の推測にすぎません。ADFS を変換して SQL Server クラスターを使用するのは費用に見合う価値があるでしょうか?

答え1

次の場合には問題となります:

  1. 複数のノードを持つ ADFS ファームがあります。
  2. ADFS ノードは WID (SQLExpress/LocalDB) を使用しています
  3. クレームを発行するように構成された Web API を備えた「アプリケーション グループ」(OIDC アプリケーション) を使用します。

(ほとんどの) SAML 接続とは異なり、OIDC は IDP から直接データを取得します。

ADFS+SQLexpress はノード間でのみ構成を共有するため、アプリケーションが認証されたファーム ノードとは異なるファーム ノードからトークンを取得しようとすると失敗します。

簡単に答えるなら、ADFS を SQLExpress 構成から SQL Server 実装に切り替えることです。これを実行すると、OIDC は安定して動作しました。

これに関する資料はなかなか見つかりません。私の情報源は消えてしまったので、機会があればメモをオンラインに公開してリンクを提供するつもりです。

もう機能しない古いリンク:

関連情報