0

MVC WebアプリケーションからのAD認証に成功した後、クライアント側のスクリプトがWeb APIにアクセスするためにヘッダにトークンを設定します。AngularJSがAzure AD認証トークンを渡してwebapiを呼び出す方法

OnAuthorizationCodeReceived()最後の行にはログインが成功し

private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification context) 
    { 
     var code = context.Code; 

     ClientCredential credential = new ClientCredential(clientId, appKey); 
     string userObjectID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
     AuthenticationContext authContext = new AuthenticationContext(Authority, new NaiveSessionCache(userObjectID)); 

     Uri uri = new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)); 

     AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(code, uri, credential, graphResourceId); 

     HttpContext.Current.Request.Headers.Add("Authorization", "Bearer " + result.AccessToken); 
    } 

後、私は "認可" ヘッダを設定します。しかし、私はAngularJSエンドからAPI呼び出しを使用することはできません!私はここで何が欠けていますか?要件は、私はAngalJSから認証するためにADALを使用する必要はありません。なぜなら、Webアプリケーションはすでにユーザーを認証し、有効なトークンを渡しているからです。

答えて

1

あなたはクッキーにアクセストークンを保存しようとすることができます:

HttpCookie tokenCookies = new HttpCookie("token"); 
tokenCookies.Value = result.AccessToken; 
tokenCookies.Expires = DateTime.Now.AddHours(1);        
HttpContext.Current.Response.Cookies.Add(tokenCookies); 

次に、クライアント側のクッキーからのアクセストークンとAJAX呼び出しを行います。

+0

角の通過からWebAPIを呼び出すだけで、ヘッダーのトークンが機能しません。クライアントから受信したトークンをAPIによってAzureに渡して認証され、IDを受け取る方法があるはずです。 [link](https://azure.microsoft.com/nl-nl/resources/samples/active-directory-angularjs-singlepageapp-dotnet-webapi/)は、ADALを使用してウェブサイトから独立して認証するため、うまくいきます。私の場合、MVC Webアプリケーションから認証が行われ、angleはトークンを使用してapiを呼び出してください。どんな洞察も大変ありがとう! – user2058413

+0

私は正しい道にいるかもしれないと思う。私はAngularJSからサーバー側にトークンを取得できるので、私は手動でトークンを検証する必要があると思う。この[link](https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation/blob/master/TodoListService-ManualJwt/Global.asax.cs)には、カスタム検証ハンドラが表示されます。私の場合、それはtokenHandler.ValidateToken()で例外をスローします。コメントに「authorization_uri」と「audience」が表示されません。私はトークンでこれらの2つを送る必要があると思います。私はヘッダーを介してそれを送信する必要がありますか?もしそうなら、私はどのような名前を鍵に使うべきですか? – user2058413

+0

アクセストークンにリクエストヘッダーのアクセストークンを含む正しいアクセス権が含まれている場合、あなた自身のapis/microsoft hosted apis(anjular appやfiddlerのようなツールに関係なく)を呼び出すことができます。 –

関連する問題