1

私は同じディレクトリに2つのAzure ADアプリケーションを持っていますが、それぞれFrontendAuthBackendAuthと呼んで、ASP.NET MVCフロントエンドとWeb APIバックエンドの認証を提供します。 MVCフロントエンドは標準のUseOpenIdConnectAuthentication設定を使用して保護されています。ウェブAPIのバックエンドはUseWindowsAzureActiveDirectoryBearerAuthenticationです。ADAL JSが期待通りに動作しないことを確認

フロントエンドにログインしてFrontendAuthを認証し、ADAL JSを使用して取得したトークンをBackendAuthに提供することで、バックエンドでホストされているAPIをJavaScript経由で消費します。私はマニフェストを編集しなければならない古典的なポータル

  • BackendAuthへのアクセス権を持っているFrontendAuthを設定する必要があります

    • 私の期待/仮定がある

      仮定これらのファイルのいずれかまたは両方を設定するoauth2AllowImplicitFlowtrue

    • これを設定すると、ADAL JS私はADAL JS設定のendpointsオブジェクトは私ができるバックエンドAPIのURLとBackendAuth

    アウトカム

    のクライアントIDが含まれている必要がありFrontendAuth

  • のものであることをclientIdを設定する必要がありますフロントエンドにログインし、バックエンドサービスとADAL JS経由で通信する私の目標を達成する:

    • のものであることがclientIdセットを有するtrue
    • ADAL JSに設定oauth2AllowImplicitFlow性を有する全て
    • どちらマニフェストファイルでBackendAuthへのアクセスを持たない
    • FrontendAuthアプリケーションはADAL JS構成のエンドポイントオブジェクトが設定されていませんすべて

    質問で

    私の仮定が正しい

    • した。これらの知見に基づいて

      私は、次の点を理解したいと思いますか?これはどのようにADAL JSが動作するように意図されていますか?

    • なぜアプリケーションのアクセス不足および変更されていないマニフェストファイルは、認証が成功したかどうかに影響しませんでしたか?
    • これらの措置はいつ認証結果に影響しますか?
  • +0

    'FrontEndAuth'はマニフェストに' oauth2AllowImplicitFlow:true'が必要です。これは、 'BackEndAuth'マニフェストには必要ありません – bkwdesign

    答えて

    0

    ここでは2つのOAuth2フローを混在させています(authorization code flowimplicit flow)。どちらも、クライアントアプリケーションにトークンを発行するためのものです。認証コードフローはサーバー上で実行されているWebアプリケーション(MVCアプリケーションなど)に使用され、暗黙的なフローはSPAなどのパブリッククライアント向けです。

    OpenID Connectを使用して、ハイブリッドフローを使用してMVCアプリケーションにサインインすると、ブラウザから認証コードが受信されます。このコードを使用して、認可サーバーと通信し、JWTトークンを取得し、Cookieセッションに格納します。 FrontendAuthアプリケーションにBackendAuthアプリケーションを呼び出す許可を与えている限り、同じコードを使用してBackendAuthアプリケーションのJWTトークンを取得することができます。

    ユーザーのブラウザのJavaScriptを有効にして、BackendAuthアプリを呼び出すには、何らかの形でアクセストークンをブラウザに渡す必要があります。これを行うには、トークンを最初のリクエストとともに送信し、それをローカルストレージに置くか、(セキュリティで保護された)MVCルートを公開してトークンを取得します。

    私がここで説明している例は、認証コードを使ってGraph APIのトークンを受け取ったthis Azure AD sampleを参照してください。

    ADAL.jsは暗黙の流れを実装およびSPAのようなJavaScriptアプリケーションのために意味されるなど

    +0

    2つのフローの違いを知っています。(私は既に、認証APIを使ってGraph APIからトークンを取得しています)、本当に知りたいのですがマニフェストファイルが変更されず、フロントエンドのAzure ADアプリケーションにバックエンドのアクセス権がないときに、バックエンドサービスを呼び出すことができる理由があります。 –

    +1

    @nick_wバックエンドとの認証に使用されるJWTトークンの「aud」クレームをチェックします。 https://jwt.ioを使用してトークンをデコードできます。 – MvdD

    0

    あなたが明示的に[承認]を使用してウェブAPIコントローラを飾っていないようですね、どちらかのクラスレベルで(属性またはアクションレベル)。したがって、Web APIは、コンテンツを要求した人にコンテンツを提供することができます。

    関連する問題