0

私は現在、私のAzure ADでアカウントを作成して正しいグループに入れるためにGraph APIを使用するWeb APIを持っているプロジェクトに取り組んでいます。ベアラトークンでWeb APIを認証できません

次に、ネイティブiOSアプリケーションとangularJS Webアプリケーションから呼び出されるいくつかのAPI呼び出しが公開されています。クライアントは、自分のユーザーがまったくばかげていると確信しているので、認証を行うという奇妙な方法を作り出しました。

クライアントは、カスタムのプリペア済みiOSデバイスを特定の人に渡しています。デバイスにAzure ADユーザー(プリンシパル)とパスワードがあります。渡されたパラメータが正確に、100%ではないですが、非常に似

public async Task<string> GetTokenForUserAsync(string userPrincipalName, string password) 
    { 
     var uri = string.Format("{0}/oauth2/token", AuthString); 
     using (var httpClient = new HttpClient 
     { 
      DefaultRequestHeaders = { Accept = { new MediaTypeWithQualityHeaderValue("application/json") } } 
     }) 
     { 
      var values = new Dictionary<string, string> 
      { 
       {"resource", GraphUrl }, 
       {"client_id", ClientId }, 
       {"client_secret", ClientSecret }, 
       {"grant_type", "password" }, 
       {"username", userPrincipalName }, 
       {"password", password }, 
       {"scope", "openid" } 
      }; 

      var content = new FormUrlEncodedContent(values); 
      var response = await httpClient.PostAsync(uri, content); 

      var responseContent = await response.Content.ReadAsStringAsync(); 

      return responseContent; 
     } 

:それらが配られるとangularJSウェブアプリ上でいくつかのプロセスがこれを行い、アプリは、このようになります私のトークンコントローラを呼び出します

この呼び出しは実際に私にaccess_tokenを提供します。私が持っている問題は、私が得るトークンが決して承認されないということです。私はいくつかのスタートアップ設定を試みましたが、何も動作していません。

は現在、私はそれは私がアズールとActive Directoryで働いて初めてです

public void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions 
     { 
      TokenValidationParameters = new TokenValidationParameters 
      { 
       ValidAudience = ConfigurationManager.AppSettings["ida:ClientId"] 
      } 

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

私Startup.Auth.csに次のコードを持っています。だから、私は本当に愚かなことをする可能性が高い。現時点では、私はスタイリングと「正しい方法」についてあまり気にしません。私はちょうどこのことを働かせたい:/

私は自分の問題を正しく記述し、それに応じて私の質問を文書化しました。ご不明な点がございましたら、お気軽にお問い合わせください。

おかげ

答えて

0

は、私はあなたがVaRの値からaccesstokenを取得することができると思ういけない事前に束=新しい辞書 { { "リソース"、GraphUrl}、 { "のclient_id"、ClientIdを}、 { "client_secret "、ClientSecret}、 {" grant_type "、" password "}、 {" username "、userPrincipalName}、 {" password "、password}、 {" scope "、" openid "} }; ですので、他の方法を試すこともできます:

 AuthenticationContext aContext = 
       new AuthenticationContext("https://login.microsoftonline.com/tenantid"); 
      AuthenticationResult aResult = 
       aContext.AcquireToken("https://graph.windows.net", 
           "1950a258-227b-4e31-a9cf-717495945fc2", 
           new UserCredential(UserId, PasswordId)); 

      string result = string.Empty; 
      HttpClient httpClient = new HttpClient(); 
      httpClient.DefaultRequestHeaders.Authorization = 
       new AuthenticationHeaderValue("Bearer", aResult.AccessToken); 
      HttpResponseMessage response = 
       httpClient.GetAsync("https://graph.windows.net/tenantid/users/userid?api-version=1.6").Result; 

      if (response.IsSuccessStatusCode) 
      { 
       result = response.Content.ReadAsStringAsync().Result; 
      } 
      Console.WriteLine(result); 
      Console.ReadLine(); 
関連する問題