0

Azure ADを使用してマルチテナントサービスWeb APIを呼び出す、マルチテナントAngularJSシングルページアプリケーションで認証を有効にするにはどうすればよいですか?マルチテナント認定を有効にする方法(AngularJS <-> Azure AD)?

これは私が使用可能にしようとしている高レベルのフローである:

           マルチテナントAngularJSアプリケーション[ClientApp] - >マルチテナントASP.NETウェブAPI [サービスアプリケーション]

私は、ADAL for JS(OpenID Connect)を使用してAzure ADログインが必要なマルチテナントのAngularJSアプリケーションを持っています。このウェブアプリケーションは、マルチテナントアプリケーションClientAppとして開発者Azure ADに登録されており、DevAADと呼びます。私はTenant1と呼ぶ別のAzure ADでこのClientAppアプリケーションを使用することに同意しました。 Tenant1ディレクトリのユーザーが資格情報を使用してWebアプリケーションにログインしてlogin.microsoftonline.comポータルにアクセスすると、Web UIにアクセスできます。ただし、UIは、OAuth 2.0暗黙のフローを使用して、ユーザーに代わってWeb APIを呼び出すことができません。

AADSTS65001:ユーザーまたは管理者がID「<ClientApp_ClientID>」で アプリケーションを使用することに同意していないこれは私がJavaScriptコードで見ていたエラーメッセージです。このユーザーとリソースの対話型の 承認リクエストを送信します。

ClientApp UIアプリケーションと同じDevAADディレクトリに登録されているServicesAppと呼ばれるバックエンドのWeb APIサービスを表す他のAzure ADマルチテナントアプリがあります。 ServicesAppのクライアントIDとアプリID URIが、これらのサービスの有効なオーディエンスです。このServicesAppアプリケーションは同じTenant1ディレクトリに同意されています。 ServicesAppへのアクセス権を持つネイティブクライアントアプリケーションから呼び出されると、サービスはコントローラのSystem.IdentityModel.Tokens.Jwt 4.0.0 and the [System.Web.Http.Authorize]属性で提供されているOWINミドルウェアを使用してTenant1ディレクトリからユーザーを認証しています。

構成の詳細:

ClientApp

のAzure ADのアプリケーションマニフェストをtrueにavailableToOtherTenantsセットとtrueにoauth2AllowImplicitFlowセットを持っています。 ClientAppには、ServiceApp Azure ADアプリケーションにアクセスする権限があります。

AngularJSアプリケーションは、以下の構成があります。ServiceApp

adalAuthenticationServiceProvider.init(
{ 
    tenant: 'common', 
    clientId: <ClientApp_ClientID>, 
    endpoints: { <ServiceEndpoint> : <ServiceApp_ClientID> } 
}, $httpProvider); 

ValidateIssuerがIAppBuilder.UseWindowsAzureActiveDirectoryBearerAuthentication()

に渡さWindowsAzureActiveDirectoryBearerAuthenticationOptions構成オブジェクトにTokenValidationParametersオブジェクトではfalseに設定されています既知のClie ServiceApp ntApplications「のプロパティ 『』 [<ClientApp_ClientID>「]

アズールADマニフェストはへ セットで」私はマルチテナント型のWeb APIを呼び出すマルチテナントWebアプリケーションのいずれかの例を見つけることができませんでしたAngularJSで構築された単一のページアプリケーションです。 Azure ADでこれをどのように実装できますか?

+0

あなたは「あなたはこのアプリの使用に同意した」と言います。それはあなたが実際に私たちの同意フレームワークを通過したことを意味しますか?あなたのWeb APIには、(Graph APIのような)アクセスする必要のある下流のAPIがありますか?同意画面でこれらの追加のアクセス許可を確認しましたか? –

+0

はい、同意フレームワークを使用して、ClientAppおよびServiceAppアプリケーションへの "Tenant1"アクセスを提供しました。[http://account.activedirectory.windowsazure.com/Consent.aspx?ClientID=clientId](http ://account.activedirectory.windowsazure.com/Consent.aspx?ClientID = clientId)、「Tenant1」ディレクトリのユーザーとグローバル管理者の役割でログインします。 「アクセスを許可する」をクリックし、従来のポータルの「Tenant1」ディレクトリにあるClientAppとServiceAppの両方をアプリケーションとして見ることができます。 –

+0

こんにちはRyan、これは従来のプロセスと思われ、私はあなたがそれを正しく行っているとは確信していません。ここをクリックしてください[外部ユーザーへのアクセスを許可するリンクを構築する(レガシー)](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applications)下記の私の答えを見て、URLのサインを生成し、ユーザーがアプリに同意するように更新された方法を探してください。 –

答えて

0

hereというテンプレートを使用して認証コードURLを生成してください。

ます。また、これをコピーして、独自に値を置き換えることができ

:「プロンプト= admin_consent」:URLの末尾に

https://login.microsoftonline.com/common/oauth2/authorize?client_id=<appid>&response_type=code&redirect_uri=<replyurl>&resource=<resource>&prompt=admin_consent 

注私は、クエリ文字列を追加しました。 これは、会社の管理者だけが行うことができるものであり、テナント全体のためにアプリに同意するので、誰も今後同意する必要はありません。個々のユーザーレベルでのみ同意する場合は、「プロンプト=同意」に変更するか、同意するプロンプトを強制しない場合は、すべてを一緒に削除することができます。

これが役立つ場合はお知らせください。

関連する問題