Azure ADサインインを追加する既存のWebアプリケーションがあります。アプリケーションはマルチテナントであり、ユーザーは現在ユーザー名とパスワードシステムを使用してサインオンしています。当社が所有するテナントは、AzureのグローバルアカウントまたはAzureのドイツアカウントを使用している可能性があります。 Azure ADのMicrosoft Azureサービスは特定の地域に依存していないため、これは問題ではないと思いました(セキュリティ+ IDセクションhereを参照)。Azure ADマルチテナントのサインイン - microsoftonline.comとmicrosoftonline.deのテナントと
まず、ドキュメンテーションを見て、複数テナントのWebアプリケーションのAzureサンプルを調べましたhere。サンプルアプリケーションは、私の最初の試行の基礎であり、このすべてがどのように動作し、どのようにして私たちのシステムに組み込むことができるかを見ています。
サンプルAzureアプリケーションは、グローバルバージョンのAzureに登録されています。サインアッププロセスは、グローバルサイトのテストテナントにとっては成功です。この問題は、ドイツのテストテナントが原因です。
アプリはユーザーをドイツのログインエンドポイントに誘導し、予想どおりに同意を求めるプロンプトを表示します。グローバルAzureにあるアプリケーションは、ドイツのテナントのエンタープライズアプリケーションエリアにもコピーされます(クリックすると、情報とパブリッシャーを見ることができます)。だからそれはまた大丈夫だったようです。しかし、次のエラーが返されAcquireTokenByAuthorizationCodeを使用してトークンを要求するときに:
AADSTS70002: Error validating credentials.
AADSTS50012: Invalid client secret is provided.
私はAcquireTokenByAuthorizationCodeで使用するために異なる鍵を生成しようとしましたが、同じ結果を得るています。
これまで誰かがこれを理解していれば(おそらくそれはできませんか?)、アイデアを持っているか、ドキュメンテーションやサンプルの正しい方向に私を指し示すことができました。
更新: AcquireTokenByAuthorizationCodeとグラフAPIが動作しないという事実は、同意が許可されると、ログイン妨げません。認証チャレンジに置き換えられた場合は、認証チケットが送信されます。
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties {
RedirectUri = "/OnBoarding/Step2?state=" + myTenant.IssValue
}, myTenant.IsDe ? "AzureGermany" : "AzureGlobal");
および/オンボーディング/ステップ2にではなくAuthenticationResultの主な主張を通じてテナントIDを確認することが可能になります。
string tenantId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
対
var result = authContext.AcquireTokenByAuthorizationCode(code, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), credential);
string tenantId = result.TenantId;
それはテナントIDを取得し、しかし、オンボードプロセスを完了するためにAcquireTokenByAuthorizationCodeとグラフAPIを使用してバイパスする方法を合法わからない....
この[issue](https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims/issues/19)に関連する無効なクライアントシークレットエラーがあります。 –