1

OpenID Connectの暗黙的フローを使用してAzure ADテナントアカウントとのシームレスなログインをサポートするアプリケーションがあります。ユーザーがAzure ADのエビデンスを発行したアプリにアクセスする権限がある場合、アクセスは自動的に許可されます。それ以外の場合は、通常のアプリケーションのログイン画面が表示されます。Azure AD with prompt = noneユーザーが別のテナントにログインしたときにBad Requestを表示します

ユーザ認証が必要になるたびに、prompt=noneを指定しているAzure ADログインページ(https://login.microsoftonline.com/xyz)にユーザをリダイレクトします。

ODIC specificationを尊重することは、次のような効果があります。

認証サーバMUST NOT表示任意の認証や 同意のユーザインタフェースページ。エンドユーザが がまだ認証されていない場合、またはクライアントが要求されたクレームに対して事前設定された を持っていない場合、または要求を処理するために他の条件を満たしていない場合はエラーが返されます。エラーコードは通常 login_required、interaction_requiredになります。これは、 の既存の認証および/または同意をチェックする方法として使用できます。

予想通りそれは一般的に動作しますが、しかし、AzureのADログインページは、エンドユーザーにエラー画面が表示され、ユーザーが別のAzure ADテナントにログインしたときにそれが起こる場合があります。

ユーザーアカウント「...」アイデンティティプロバイダ 『https://sts.windows.net/.../』からは は「...」テナントに存在していないと アプリケーション「...」というテナント内にアクセスすることはできません。テナントで最初に外部ユーザーとして アカウントを追加する必要があります。 別のAzure Active Directoryの ユーザアカウントでサインアウトしてもう一度サインインしてください。

質問は以下のとおりです。

  1. はそれがODIC仕様に違反しませんか?
  2. シームレスにそのようなケースをユーザーファッションで適切に処理するにはどうすればよいですか? (アプリはAzure ADへのリダイレクト後に何が起こっているのかを担当していない)。

screenshot

答えて

2

これは仕様に違反していることに同意しますが、回避策を提示することはできますか?

domain_hintまたはlogin_hintパラメータを指定して、システムが有効なセッションを判断できるようにすることができます。現時点でどのセッションユーザがサインインしているかにかかわらず、正しい答えが得られることを願っています。

+0

domain_hintがトリックになります! –

1

はい、それはスペックに違反していると、アプリケーションはもはやユーザーエクスペリエンスの制御を維持することはできませんので、prompt=noneの目的に反し。 @vibronetは、MS側でレコードをまっすぐに設定できる場合があります。

+0

答えをよろしくお願いいたします。 @vibronet、私たちはあなたのために呼んでいる:) –

+0

ああ、@vibronetはVittorio Bertocciです!あなたの記事を愛してください...世界をより良い場所にしてくれてありがとう! –

2

はい、これはOIDC仕様に違反しています。私たちはバグを作りました。

STSが間違ったセッションを選択しているためにエラーが発生した場合は、login_hintまたはdomain_hintを使用して、STSが正しいセッションを選択するのを支援できます。

関連する問題