2016-03-23 14 views
4

ASP.NET(MVC Core 1.0)でクレームベースの認可を使用して調査しています。 ClaimsIdentityを設定するときには、それぞれClaimを表すキー/値ストリングのペアのリストを提供します。例:ClaimTypesのASP.NET要件

私が理解したいのは、私が望むキー/値を使用できるということです。しかし、ClaimsType classで利用可能ないくつかの事前定義済みのキーがあることに気付きました。だから、私は潜在的に代わりにこれらの事前定義されたキーの一部を使用することができます:

List<Claim> claims = new List<Claim> 
{ 
    new Claim(ClaimTypes.Sid, user.ID), 
    new Claim(ClaimTypes.Name, user.Name), 
    new Claim(ClaimTypes.Role, "basic") 
}; 

質問:私は事前に定義されたキーを使用する場合

  1. 、実際の値に関するいかなるルール/制限があります。各キーに割り当てられているか、それともアプリケーション定義ですか?たとえば、ClaimTypes.Sidにデータベースプライマリキーを張っても構いませんか?または、ASP.NETには、ClaimTypes.Sidに含める必要があるとの特定の期待がありますか?

  2. を必要な、またはそれが完全に含ま含めるかどうするかを決定するためのアプリケーションに任されている任意のClaimTypesありますか?答えは、私がやりとりする特定のサードパーティ認証サービスに依存するかもしれないが、サードパーティ認証を使用しない自己完結型ASP.NETプロジェクトの単純なケースはどうだろうか。 ASP.NET自体には要件がありますか?

特定のキー/値の使用に関する要件やベストプラクティスへのリンクがあれば幸いです。

答えて

5

私は、事前に定義されたキーを使用し、各キーに割り当てられた実際の値に関するいかなるルール/制限 があり、あるいはそれが定義されているアプリケーション ある場合は?たとえば、 ClaimTypes.Sid​​にデータベースプライマリキーを張っても構いませんか、またはASP.NETにはClaimTypes.Sid​​に含めるべきものがあるとの特定の期待がありますか?

ClaimTypesのいずれかを使用すると、結果がClaimの場合はTypeプロパティも変更されます。 You can find a list of these types here。あなたが知っている限り、データベースIDをClaimTypes.Sidに自由に入れることができますが、私は自分の名前を使ってその名前を使用することを強くお勧めします。

アプリケーションに含めるか含まないかを決定するために、アプリケーションが まで完全に対応していますか?私は 答えは特定のサードパーティの認証サービスに依存する可能性があります サードパーティの 認証を使用しない自己完結型のASP.NETプロジェクトの単純なケースについてはどうでしょうか。 ASP.NET自体には要件がありますか?

サードパーティを想定しない場合は、何が必要かどうかを判断する必要があります。クッキー(サードパーティソースではない)にクレームを保存する場合、スペースはいくらか制限されています。 cookies cannot be larger than 4096 bytes in total

ASP.NETコアクレーム認証でこれまでに見つけた最高の記事はherehereです。この投稿時点ではまだRC1にありますので、最終リリース前に変更されることがあります。

1
  1. 私は、事前に定義されたキーを使用し、各キーに割り当てられた実際の値に関するいかなるルール/制約がある、またはそれが定義されているアプリケーションであれば?たとえば、ClaimTypes.Sid​​にデータベースのプライマリキーを張っても構いませんか、またはASP.NETにはClaimTypes.Sid​​に含めるべきことがあるとの特定の期待がありますか?

基本的にルールの変更はありませんが、トークンの消費者によって異なります。 Asp.Net Identityはデフォルトでユーザ名がClaimTypes.Name(ユーザが使用する名前またはメールを表示)、ロールはClaimTypes.Role、ユーザIDは必要ありません(ローIDは必要ありません。ユーザを識別するためには一意です。つまりGuidまたは電子メールアドレス)はClaimTypes.NameIdentifierとなります。デフォルト値はhere on GitHubです。

つまり、カスタムクレームタイプを使用する場合は、Asp.Net IDを設定するときにClaimsIdentityOptionsにそれを伝える必要があります。

コントローラでUser.Identity.Nameにアクセスすると、UserNameClaimTypeに設定されたクレームタイプが使用されます。申し立ての種類がClaimsIdentityOptionsのものと一致しない場合は、単にnullを返します。

+0

アイデンティティについての情報をありがとう。私は現在アイデンティティを使用していないが、それは道を変えるかもしれない。私はMVCコア1でEF6を使用しています(EF7があまりにも不完全であるため)、アイデンティティはEF7と絡み合っているように見え、[いくつかのフープを飛び越えなければならない](http://stackoverflow.com/a/33962018/333127) EF6と仕事をするために、私は今のところ控えています。 – cbranch