2016-11-09 3 views
1

私は/connect/tokenエンドポイントを要求するときに返されたaccess_tokenにカスタムクレームを追加するために、ASP.NETコア1.1アプリケーション(クロスプラットフォーム)を構築して(this sampleを使用して)試しています。私は必要なもの
access_tokenで連載主張を返すことだけでなく、このような応答でそれらを返すことです:私はAspNet.Security.OpenIdConnect.Serverを使用して、順番に私のプロバイダを記述する必要があり、私はインターネット上で見つけたものOpenIddictを使用してトークンを要求するときに返されるカスタムクレームを追加するにはどうすればよいですか?

{ 
"token_type": "Bearer", 
"access_token": "...", 
"expires_in": 1799, 
"custom_claim": "..." 
} 

私がしたいことをすることができるようにする。
最初のサンプルを使用する簡単な方法はありませんか?
私はOAUth 2.0、グラントタイプPasswordを使用していますが、JWTは使用していません。
ないJWTを使用しないための要件、それだけで私はASP.NET 4.5でのOAuthに

+0

具体的な理由はありますか?返されたトークンのペイロード部分をデシリアライズするのはjavascriptでも非常に簡単ですか?彼らがあなたの例のように望む理由については、ちょっとした面倒です。 –

+0

@LouisLewis私はJWTを使用していないので、たとえ私がJWTを使用していても、カスタム化されたクレームをトークンに返すことができないとしても、デシリアライズは当てはまりません。 – Dabbas

答えて

2

access_tokenはで連載主張を返すことだけでなく、このような応答でそれらを返すことです:

これは意図的(OpenIddictでサポートされていないだけでなく、それはない、ので、標準)。代わりに、IDトークン要求として、またはuserinfoエンドポイントを通じて必要なプロパティを格納することをお勧めします。

詳細はSO questionを参照してください。 openiddict-samplesの彼のリポジトリで@Pinpointからの回答として

1

を使用していますさて、私たちはの設定方法でOpenIdConnectOptionsイベントプロパティを使用してそれをやりましたスタートアップクラスインスタンスのために、このように、オープンIdを接続ミドルウェアを追加します。

  Events = new OpenIdConnectEvents 
      { 
       OnTicketReceived = n => 
       { 
        //TODO Your logic here to add custom claims via n.Principal.Identities.First().AddClaims(); 

        return Task.CompletedTask; 
       } 
      } 

をご利用の場合のために、そのオプションですか?私は必要なもの

0

私は(Implementing the Connect/Token Endpointセクションで)this articleに続く...
私はそれがない理由です、私がやろうとしているが、標準ではないことを彼の答えから考え出しましたとても明らかで簡単です。
クライアントがJWTをデコードしてクレームを取得できるように、JWTを使用して独自のクレームを追加する必要があります。

+1

注:認可サーバーとクライアントアプリケーションの間でのみクレームを共有する場合は、アクセストークン形式としてJWTを使用しないでください。代わりに、 'OpenIdConnectConstants.Destinations.IdentityToken'宛先をクレームに添付して、' scope = openid'を追加して、あなたが必要とするクレームを取り出すためにイントロスペクトすることができるアイデンティティトークン(必然的に定義によるJWT)を取得してください。 – Pinpoint

+0

@Pinpoint私はクレームと共に 'access_token'を返そうと思います。 – Dabbas

+0

アイデンティティトークンは別のトークン( 'id_token')です。 – Pinpoint

関連する問題