Claim (System.Security.Claims) に文字列のリストを保存する 質問する

Claim (System.Security.Claims) に文字列のリストを保存する 質問する

私は、認証タイプとして Asp.Net 5 MVC、Owin、Oauth2 ベアラー トークンを使用して Web アプリを開発しています。

文字列のリスト"CODEFOO,CODBAR,CODEX,.."システム.セキュリティ.クレーム.クレームカスタムクレームタイプを使用します。

ユーザーがトークンを要求すると、この「ユーザー コード」のリストがバックエンドから取得され、特定のカスタム クレーム タイプを使用して ID 内に設定されます。
ユーザーが特定の MVC アクションをナビゲートしてトークンを送り返すと、アプリケーションはクレーム内のユーザー コードのリストに特定のコードが含まれているかどうかを確認する必要があります。

List<string> userCodes = rep.GetUserCodeFromBackEnd();
string userCodesClaimType = "http://foo.it/claim/usercodesclaimtype";

現在、文字列のリストを JSON でシリアル化しています。

var claim = new Claim(userCodesCaimType, JsonConvert.SerializeObject(userCodes));

次のようにしてデシリアライズして元に戻します。

var userCodesClaim = identity.Claims.FirstOrDefault<Claim>(c=>c.Type == userCodesClaimType) ;
var userCodesClaimValue = JsonConvert.DeserializeObject<List<string>>(userCodesClaim.Value);

さて、問題はクレーム内に値のリストを格納するより良い方法があるかどうかです。
クレームには値タイプドキュメントに記載されているプロパティ:

ValueType プロパティには、値の型情報を識別する文字列が含まれます。このプロパティを使用すると、値の形式を理解し、値をシリアル化および逆シリアル化する方法に関する情報を提供できます。ソリューションで複雑な値の種類が必要な場合は、ValueType プロパティで標準の XML スキーマ型を使用して、文字列から Value プロパティをシリアル化および逆シリアル化する方法を示すことをお勧めします。

残念ながら、そのプロパティの使用法を説明する例は見つかりませんでした。Json
シリアル化は問題ありませんか、それとも ValueType アプローチを使用する必要がありますか?

ベストアンサー1

これはValueType、XML スキーマ タイプを含むなど、値がどのように解釈/逆シリアル化されるかをコードで識別する方法です。異なるソースのコード間で使用する場合は意味がありますが、独自のアプリケーションでは、コンテンツの解釈方法がわかっている限り、これを無視できます。

ただし、複数の値を持つために、複雑な型を使用する必要はありません。クレーム ID には、同じ を持つ複数のクレームを含めることができるClaimTypeため、コードを JSon 文字列にシリアル化するのではなく、複数のクレーム (ユーザー コードごとに 1 つ) を追加するだけです。すべて同じクレーム タイプを持ちます。これにより、特定のユーザー コードが存在するかどうかを確認するために メソッドを使用できるようになりますHasClaim

おすすめ記事