7

IdentityServer3 をスタンドアロン ID サーバーとして実行しています。

認証に Cookie と OpenIdConnect を使用する別の MVC クライアントがあります。とりわけクレーム変換を設定しようとしており、次のようにさまざまなクレーム タイプを参照したいと考えています。

var givenName = id.FindFirst(Constants.ClaimTypes.GivenName);
var familyName = id.FindFirst(Constants.ClaimTypes.FamilyName);
var sub = id.FindFirst(Constants.ClaimTypes.Subject);
var roles = id.FindAll(Constants.ClaimTypes.Role);

IdentityServer3 では、これらを使用して参照していますが、MVC クライアントでは、これらの文字列定数だけThinktecture.IdentityServer.Core.Constantsを参照する必要はないと思いますか? Thinktecture.IdentityServer3この場合の使用が推奨されるクライアント ライブラリはありますか? 私はThinktecture.IdentityModelいくつかの .NET 参照を試しましたが、.NET を複製しているようには見えませClaimTypesThinktecture.IdentityServer.Core.Constants。私が見つけた最高のものはSystem.Security.Claims.ClaimTypes、いくつかの欠落があるようFamilyNameです.

私が最初に見た場所は でしThinktecture.IdentityModelたが、そこにないことに驚きました。

では、魔法の参照は何ですか?それともThinktecture.IdentityServer3、これらの文字列だけをロードするのが適切ですか?

ありがとう

編集:だから、ミラーリングのように見えるThinktecture.IdentityModel.Clienta が含まれていることがわかりました。しかし、なぜこれは Jwt プレフィックスで名前が付けられているのですか?JwtClaimTypesClaimTypes

4

3 に答える 3

8

IdentityServer ClaimType 定数は、 OpenID Connect 標準クレームの単なるマップです。

これらの定数に対して独自のクラスを作成することをお勧めします.完全なIdentity Server 3パッケージを引き込む意味がなく、他のパッケージでは利用できないと思います...

スネーク ケースとして JWT の JSON を介してクレームが発生することに注意してください。たとえば、FamilyName は family_name になります。

于 2015-08-01T17:10:47.523 に答える
3

Microsoft.AspNetCore.Authentication.JwtBearerパッケージをインストールできます。JwtRegisteredClaimNames次のように使用できる構造体が含まれています。

using static Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;
⋮
var userId = User.FindFirstValue(Sub);
于 2020-02-08T19:42:22.613 に答える
1

Scott Brady に同意します。これを行う最善の方法は、定数クラスを作成することです。この目的のために共有ライブラリを作成しました。これにはクレーム タイプの定数が含まれており、サーバー プロジェクトとクライアント プロジェクトの両方で使用されています。

注意: 'id_token' および 'sub'クレーム タイプとは別に、 'IUserService 'の実装でカスタム クレーム タイプを使用できます。これにより、実装に基づいて特定の名前を使用できるため、クレーム型名もより明確になります。

于 2015-08-05T09:19:05.050 に答える