2017-07-17 23 views
3

認証タイプとして「仕事または学校アカウント」を持つASP.Net Web API(.Net Framework)アプリケーションを作成しました。これにより、AzureサブスクリプションにこのAPIアプリケーションが自動的に登録され、"App Registrations"の下に表示されます。ホームページURLがlocalhost addressを指しているのがわかります。 APIがローカルホストアドレスでローカルに起動していることがわかります。次にAzure ADからアクセストークンを取得するためにFiddlerを起動します。エンドポイントhttps://login.microsoftonline.com/<mytenant>.onmicrosoft.com/oauth2/tokenへの私のPOSTリクエスト。次の4つのパラメータがありますAzure ADのFiddlerでこのリクエストの承認が拒否されました

grant_type=client_credentials 
&client_id=<appid from Azure AD Portal> 
&client_secret=<secret from Azure AD Portal> 
&resource=<appid from Azure AD Portal> 

トークンバックを取得しました。このトークンを解読すると、私はaudappidを期待通りに見ます(Azure ADのappidと一致します)。このトークンをベアラトークンとして使用して、https://localhost:44374/api/valuesにGETリクエストのAuthorization: Bearer <mytoken>ヘッダーを追加してAPI呼び出しを呼び出します。しかし、私のAPIへのこのGET呼び出しは私に{"Message":"Authorization has been denied for this request."}エラーメッセージを返しています。

私には何が欠けていますか?

答えて

2

あなたはトークンを取得する際、あなたはhttps://xxxxx.onmicrosoft.com/WebApplicationNameのように、紺碧のポータルでのAPIアプリのPropertiesApp ID URIを見つけることができるresource値としてApp ID URIを使用する必要があります。 web.configファイルで

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
       new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
       { 
        Tenant = ConfigurationManager.AppSettings["ida:Tenant"], 
        TokenValidationParameters = new TokenValidationParameters { 
         ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] 
        }, 
       }); 

ida:Audience値が許可され、観客である:ウェブAPIは、アクセストークン内aud請求はあなたがweb.configファイルに設定されたものと一致するかどうかを確認します。

+0

Yup!それだった! 'resource'は' ida:Audience' API設定値と一致する必要があります。以前は、私のAPI設定値がURI 'https:// xxxxx.onmicrosoft.com/WebApplicationName'を使用していました。私は' resource'として 'clientid'を渡していました。どちらの値も一貫している限り動作します。つまり、Web API設定の 'App ID URI'を' resource'として使うか、 'client_id'をWeb APIの設定値と' resource'として使用してください。 – Mahesh

+0

回答が役に立ったら、回答を受け入れると考えてください。問題。 –

関連する問題