0

を使用して、それが正しいだ場合にも有効とされていません。 OWIN起動中JWTトークンは、私がサーバーコードを実装するためのMicrosoft.Azure.Mobile SDKを使用していMicrosoft.Azure.Mobile SDK

コードは以下の通りである:

public void ConfigureAuth(IAppBuilder app) 
{ 
    HttpConfiguration config = new HttpConfiguration(); 
    new MobileAppConfiguration().ApplyTo(config); 
    app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions 
    { 
     SigningKey = ConfigurationManager.AppSettings["SigningKey"], 
     ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] }, 
     ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] }, 
     TokenHandler = config.GetAppServiceTokenHandler() 
    }); 
    app.UseWebApi(config); 
} 

トークン生成コード:

Claim[] claims = new Claim[] 
{ 
    new Claim("sub", "SampleSubject"), 
    new Claim("Id", Convert.ToString(Users[0].user_id)), 
    new Claim("name", Users[0].name), 
    new Claim("surname", Users[0].surname), 
    new Claim(ClaimTypes.Role, "user") 
}; 
var token = AppServiceLoginHandler.CreateToken(claims, ConfigurationManager.AppSettings["SigningKey"], ConfigurationManager.AppSettings["ValidAudience"], ConfigurationManager.AppSettings["ValidIssuer"], TimeSpan.FromDays(30)); 
return token.RawData; 

サンプルJWTトークンは eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJHcnViZXJBUEkiLCJJZCI6IjMyODkwIiwibmFtZSI6IkRhdmlkZSIsInN1cm5hbWUiOiJCb25ldHRhIiwicm9sZSI6InVzZXIiLCJ2ZXIiOiIzIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6MjM1MzEvIiwiYXVkIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6MjM1MzIvIiwiZXhwIjoxNTAyNDYyNDQzLCJuYmYiOjE0OTk4NzA0NDN9.b5VhWzvkaEumutPZpLzImcAy4NotXCSgUIqLltVUQWI

トークンのスクリーン Decrypted JWT Token以下あたり有効です

そして、コードの下のため、

[Authorize] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/values/5 
    public string Get(int id) 
    { 

     try 
     { 
      ClaimsPrincipal claims; 
      AppServiceTokenHandler s = new AppServiceTokenHandler(new HttpConfiguration()); 
      s.TryValidateLoginToken(Request.Headers.Authorization.Parameter, ConfigurationManager.AppSettings["SigningKey"], new[] { ConfigurationManager.AppSettings["ValidAudience"] }, new[] { ConfigurationManager.AppSettings["ValidIssuer"] }, out claims); 

      AppServiceTokenHandler.ValidateToken(Request.Headers.Authorization.Parameter, ConfigurationManager.AppSettings["SigningKey"], ConfigurationManager.AppSettings["ValidAudience"], ConfigurationManager.AppSettings["ValidIssuer"]); 
     } 
     catch (Exception ex) 
     { 

      throw; 
     } 

     return "value"; 
    } 

'/取得]要求がHTTP 401 で失敗したが、同じJWTトークン 'ゲット/ 5' のためにHTTP 200が(手動トークン検証)を返します。

問題は、私はAuthorize属性を使用する場合、APIは、あなたの説明によると401

答えて

0

を返し、ですが、私は私の側にこの問題を確認しました。要約すると

enter image description here

enter image description here

アクセス保護されたWeb API

enter image description here

、あなたは上記の画面の撮影を参照して、APIエンドポイントに確認してください可能性があります。また、あなたはこの問題を解決するために、カスタムTokenHandlerを実装するためのAppServiceTokenHandler.csHmacSigningCredentials.csを参照することができます。また、あなたはCustom Authentication についてエイドリアン・ホールの本を参照することができます。

+1

うん、これは問題を解決しました。私は、 "x-zumo-auth"の代わりにAuthorizationヘッダーとしてトークンを渡しています。 –

関連する問題