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アプリケーションはすでにユーザーを認証し、有効なトークンを渡しているからです。
角の通過から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
私は正しい道にいるかもしれないと思う。私は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
アクセストークンにリクエストヘッダーのアクセストークンを含む正しいアクセス権が含まれている場合、あなた自身のapis/microsoft hosted apis(anjular appやfiddlerのようなツールに関係なく)を呼び出すことができます。 –