0

私は共有machine.keyを持つ2つのWeb APIを持っています。私は、第1のWeb APIによって生成されたベアラトークンをパラメータ(すなわちtoken = xxxxxxxx)として第2のWeb APIに渡し、そこからアイデンティティクレーム(すなわちuserId)を抽出したいと考えています。ベアラトークン(Web API)からID要求を取得

これは可能ですか?私はすべてを見てきましたが、主張を抽出するためにテキストベアラトークンを解析することに関する多くの情報はないようです。

ありがとうございました。あなたがOWINを使用している場合は、クエリ文字列からトークンを受け取り、コンテキストにそれを設定する、OAuthBearerAuthenticationProvider独自のものを実装することができ

+0

以下に述べるように、私はトークンを使ってさらに何かをするつもりはなく、それを解析してクレームを抽出します。 2番目のWeb API自体には、呼び出し元を認証するためのカスタムOauthプロバイダが既にあります –

答えて

0

internal class MyAuthProvider : OAuthBearerAuthenticationProvider 
{ 
    public override Task RequestToken(OAuthRequestTokenContext context) 
     if (context.Token == null) 
     { 
      var value = context.Request.Query.Get("token"); 
      if (!string.IsNullOrEmpty(value)) 
      { 
       context.Token = value; 
      } 
     } 

     return Task.FromResult<object>(null); 
    } 
} 

あなたはこのようなあなたのStartup.csでそれを使用することができます。

あなたはこのようなあなたの認証を実装しました
public void Configuration(IAppBuilder app) 
{ 
    // All the other stuff here 

    var audience = ""; 
    var secret = "..."; 

    app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions 
    { 
     Provider = new MyAuthProvider(), 
     AuthenticationMode = AuthenticationMode.Active, 
     AllowedAudiences = new [] { audience }, 
     IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
     { 
      new SymmetricKeyIssuerSecurityTokenProvider("MyApp", TextEncodings.Base64Url.Decode(key)) 
     } 
    }); 

    // All the other stuff here 
} 

、あなたはUser.Identityプロパティを使用して、あなたのWEBAPIコントローラにトークン情報にアクセスすることができます。カスタムの申し立てを読むには、ClaimsIdentityにキャストしてください。

var identity = User.Identity as ClaimsIdentity; 
var myClaim = identity.Claims.FirstOrDefault(c => c.Type == "myClaimKey"); 
+0

ありがとうございます。しかし、私はトークンを使って何もしないで、それを解析してクレームを抽出するつもりはありません。 2番目のWeb API自体には、既に独自のユーザーを認証するカスタムOauthプロバイダがあります。 –

+0

あなたは[この記事](https://shellmonger.com/2015/07/18/decoding-an-auth0-json-web-token-with-c/)を見ましたか? JWTを手動でデコードする方法に関する情報を提供します。 –

関連する問題