2016-05-29 12 views
1

次のコードを使用して、MVC Webアプリケーションからトークンを取得しています。しかし、私が追加した主張をどのように取り出すのかは分かりません。彼らは私のトークンと同じ応答で返されるべきですか? ありがとう!ASP.Net MVC 6のOAuth認証サービスからクレームを取得する

Startup.cs:

app.UseJwtBearerAuthentication(options => 
    { 
     options.AutomaticAuthenticate = true; 
     options.Audience = "resource_server"; 
     options.Authority = "https://www.example.com/"; 
     options.RequireHttpsMetadata = false; 
    }); 

    app.UseOpenIdConnectServer(options => 
    { 
     options.ApplicationCanDisplayErrors = true; 
     options.AllowInsecureHttp = false; 
     options.Provider = new AuthorizationProvider(); 
     options.TokenEndpointPath = "/connect/token"; 
    }); 

主張を追加:あなたはid_tokenとの両方を指定しているので

{"resource":"resource_server","scope":"openid profile","token_type":"bearer","access_token":"eyJhbGciOiJSU....","expires_in":"3600"} 
+0

なぜあなたは 'User.FindFirst(" custom_claim ")を使わないのですか? –

+0

私のクライアントは、私がasp.net Userオブジェクトを持っていないと思うXamarin iOS/Androidアプリです。私はoauthのログインをしていると私のアプリでトークンとクレームを維持しています。 – Primico

答えて

0

Should they be returned in the same response as my token?

 identity.AddClaim("custom_claim", "value", "token id_token"); 

     foreach (string role in await userManager.GetRolesAsync(user)) 
     { 
      identity.AddClaim(ClaimTypes.Role, role, "id_token token"); 
     } 

これは私のPostAsync結果でありますtokenの宛先には、アクセストークンとIDトークンの両方にクレームをコピーする必要があります。任意のJSONパーサーを使用して、access_token/id_tokenプロパティから探しているクレームを抽出できるはずです。

二つの発言:ASOSのbeta4で

  • 、あなたは何id_tokenプロパティではありませんなぜあなたはおそらく説明ticket.SetScopes("openid")と呼ばれる場合でも、明示的にIDトークンを取り戻すためにあなたのトークン要求にscope=openidを追加する必要がありましたあなたが共有した回答。このポリシーは、次のバージョンではリラックスしていました。

  • ASOS beta4(ASP.NET Core RC1)では、アクセストークンがJWT形式を使用してシリアル化されました。これは、デフォルトで暗号化された形式を使用するbeta5バージョンではもはや真ではありません。クライアントアプリケーションからそれらを読み取ろうとしないでください。代わりに、id_tokenを使用してください。これはクライアントアプリケーションで使用されることを意図しています。

+0

ありがとうございました。私はこのように私の応答をdeserializingしています:AuthToken token = JsonConvert.DeserializeObject (結果); token.access_tokenからクレームを抽出できるはずですか?私はどのようにクレームを抽出するかの例を見ていない。何らかの事例を知っていますか?再度、感謝します!!!! – Primico

+0

私はこれを試しました:var token = Convert.FromBase64String(json.id_token.split( '。')[1]);しかし、私はこのエラーが発生します:FormatException:Base-64 char配列または文字列の長さが無効です。 – Primico

+0

これを行うことによってクレームを得ました:var token = new JwtSecurityToken(token.IdToken); var claims = token.Claims;うまくいけば、これは良いアプローチです。 – Primico

関連する問題