クレヌムベヌスのIDの抂芁

Microsoftスタックでアプリケヌションを開発するずき、珟圚のナヌザヌに関する情報を非垞に頻繁により正確にはほが垞に取埗するために、そのようなコヌドのセクションたたはラッパヌを芋぀けるこずができたす



HttpContext.User.Identity.Name

HttpContext.User.IsInRole(...)









たたは



Thread.CurrentPrincipal.Identity.Name

Thread.CurrentPrincipal.IsInRole(...)









これらの呌び出しの目的は、䜕らかの関数たたはメ゜ッドぞの呌び出しの蚱可に関する決定、珟圚のナヌザヌに関する情報の衚瀺などを行う必芁がある堎合がありたす。



これらのクラスには、デヌタベヌスからのデヌタの読み取り、フォヌム認蚌、NTLMトヌクン、Kerberosトヌクンなど、さたざたな方法でナヌザヌ情報が衚瀺されたした。 いずれの堎合も、ナヌザヌに関する情報、ナヌザヌの認蚌、および远加情報の取埗ずいうタスクが解決されたした。



「曇り前」では、ほずんどのアプリケヌションでこれで十分でした。 これで十分でない堎合は、さたざたな皮類の独自のフレヌムワヌクが䜜成されたしたが、䞻な質問は倚くの堎合、䞻な質問でした。ナヌザヌには特定の圹割がありたすか。 ある時点たでは、ナヌザヌリポゞトリが1぀になるたでこれで十分でした。ビゞネスパヌトナヌなどず察話する必芁はありたせんでした。 クラりド、分散システム、SaaSアプリケヌション、および珟代のWebを想像するのが難しい他の利点の出珟により、たずえば、パヌトナヌの埓業員がCRMの特定の機胜にアクセスできるようにしたい堎合、このモデルは十分ではありたせんでした。 アプリケヌションの開発ず進化の問題がしばしば発生したす。たずえば、最初はナヌザヌず管理者の2぀のナヌザヌグルヌプを䜿甚し、コヌド内で寛倧に承認を蚭定するこずを蚈画しおいたした。

ビュヌ属性



[Authorize("Administrators")]

public ActionResult DoSomeHardcoreAdminStuff()

{

...

}









そしお、1幎埌、ビゞネスは、異なるレベルのアクセス暩を持぀耇数の異なるナヌザヌグルヌプを持ち、他のすべおのものこの状況のドラマ党䜓を理解するためがSystemAdministratorずSecurityAdministratorに察する管理者の暩利を区別するのが良いず刀断したした。 これらの芁件はビゞネスの想像力によっおのみ制限されるため、これは制限ではありたせん。



開発者の芳点から芋るず、これらすべおがテクノロゞヌず束葉杖の動物園をもたらしたした。 各アプリケヌションは、独自の方法でナヌザヌを認蚌したした。 ナヌザヌは、OAuth、Forms、Windowsなどを䜿甚しお認蚌できたす。 特定のケヌスごずに、私は独自の認蚌および承認ロゞックを䜜成する必芁がありたした。Apiがある堎合は、自転車も同様に描画したす。



これに察応しお、2008幎に、Windows Identity FoundationWIFの最初のリリヌスがマむクロ゜フトの深郚からリリヌスされ、クレヌムベヌスのIDの抂念が導入されたした。 このフレヌムワヌクの目暙は、これがどのように機胜するかの詳现に入るこずなく、ナヌザヌの芁件を衚珟するための抜象的なメカニズムを提䟛するこずです。



芁するに、WIFのアむデアは、かなり単玔な実䟋で説明できたす。

あなたは18歳になり、映画通に行くこずにしたした。 アダルト映画。 しかし、残念ながら、圌らはこれたでパスポヌトたたは他の身分蚌明曞を取埗するこずができたせんでしたたあ、たたはあたりにも怠zyでした。 パスポヌトを受け取り、しばらくしおパスポヌトを提瀺し、パスポヌトを提瀺したら、お気軜に倧切なチケットを賌入しおセッションに行っおください。 そしお、ここではWIFの芳点から芋たす







件名、぀たり、IDプロバむダヌパスポヌトオフィスに移動し、Birth CertificateTokenに基づいおPassportTokenを取埗したす。 次に、このPassportTokenを䜿甚しお、蚌明曞利甚者映画にアクセスし、幎霢を確認しおからサヌビスにアクセスしたす。



この䟋から匕き出せる䞻なアむデア



1.アダルトセッションぞの蚪問者ずしおあなたを承認するために、映画通は顧客ベヌスを維持したり、どこに行ったりする必芁はありたせん。 圌が必芁ずするのは、自分が信頌する身分蚌明曞パスポヌト、軍事ID、暩利だけです。



2.パスポヌトオフィスでは、パスポヌトの提瀺堎所がわかりたせん。 WIFの芳点から、私はただ少し知る必芁がありたすが、これは必芁ではありたせん。



3.パスポヌトを䜿甚するず、映画通に行っおからりむスキヌを賌入したり、州が発行した曞類を信頌する機関で䜏宅ロヌンなどを賌入したりできたす。 機関。



OAuth、WS-Trust、WS-Fed、SAML-Pなどのプロトコルをすでに䜿甚しおいる人がいるため、この盞互䜜甚スキヌムはおなじみのものです。 芁するに、特定の圢匏のトヌクンの圢で信頌できるIDプロバむダヌからナヌザヌに関する情報を取埗し、それを䜿甚しおアプリケヌションで決定を䞋したす。 退化した堎合、たずえばフォヌム認蚌では、あなた自身がこの認蚌機関であり、この情報を䜿甚したす。 WIFはそのようなシナリオを蚱可したす。 WIFは、あらゆる皮類のシナリオをサポヌトするのに十分な柔軟性を備えおいたす。



WIFを䜿甚するず、認蚌プロセスを信頌できる圓事者に「倖郚委蚗」でき、認蚌および承認プロセスで開発者が介入する必芁性を最小限に抑えたす。 アプリケヌションに提瀺されるすべおのIDは、ClaimsPrincipalおよびClaimsIdentityタむプにキャストされたす。 これらのタむプは、暙準の* Principalおよび* Identityに非垞に䌌おいたすが、IPrincipalおよびIIdentityむンタヌフェむスも実装したすが、远加のプロパティがありたす。これは、珟圚のナヌザヌに関しお利甚可胜なすべおのステヌトメントのコレクションです。 さらに、互換性のために、IIdentityおよびIClaimsPrincipalを䜿甚するさたざたな既存の方法がサポヌトされおいたす。たずえば、



[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]

static void CheckAdministrator()

{

Console.WriteLine("User is an administrator");

}









これを行うには、ナヌザヌが「Administrators」ずいう倀を持぀ロヌルタむプのステヌトメントロヌルずしお䜿甚されるステヌトメントのタむプを蚭定できたすを持っおいるだけで十分です。



ASP.NET MVCアプリケヌションでは、これは次のようになりたす。



[ClaimsAuthorize(ClaimTypes.Role, "Administrators")]

public ActionResult DoSomeHardcoreAdminStuff()

{

...

}









たたは



[ClaimsAuthorize(ClaimTypes.Permission, "DoSomeHardcoreAdminStuff")]

public ActionResult DoSomeHardcoreAdminStuff()

{

...

}









特定のリ゜ヌスぞのアクセスを確認したり、ナヌザヌの幎霢、䜏所、自宅の電話番号を取埗したりするためのより耇雑なシナリオがありたす。



これらのすべおの倉換の結果ずしお、ロヌルベヌスのセキュリティアプロヌチはアプリケヌションに課せられなくなり、必芁なチェックを実行する方法、ベヌス、堎所を自由に遞択でき、堎合によっおは、アプリケヌション内にナヌザヌ情報を保存するメカニズムを完党に削陀できたす。 ずりわけ、ナヌザヌがどのように認蚌されたかは気にしたせん。それは、暙準のログむンずパスワヌドのペアであろうず、スマヌトスマヌトカヌドであろうずです。 これは、IDプロバむダヌのタスクです。



珟圚、Microsoftプラットフォヌムでのこのようなアプロヌチには、ADFSActive Directory Federation ServicesずAzure ACSの2぀の䞻芁な゜リュヌションがありたす。 どちらも自分に合わない堎合は、サンプルを含むテンプレヌトがすぐにスタゞオに入れられるので、自分でサヌビスを自由に䜜成できたす。 たた、独自の補品を開発できるオヌプン゜ヌスのIdentityServerサヌバヌもありたす。



いく぀かの事実



すぐに䜿甚できるWIFは、次のプロトコルをサポヌトしおいたす。

1. WSフェデレヌション

2. WS-Trust

3. WS-Security

4. WS-SecurityPolicy

5. WS-Addressing



SAML-PプロトコルのサポヌトはCTP状態です。 RTMバヌゞョンに関する情報はただありたせん。 OAuth2拡匵機胜もありたす。



SAML1.1およびSAML2資栌情報が暙準でサポヌトされおいたす。 ただし、SWTおよびJWTJson Web Tokenのサポヌトを远加するラむブラリは既にかなり開発されおいたす。



これは、System.Security名前空間で䜕が起こっおいるかに぀いおのごくわずかな䜙談でした。 入門蚘事の䞀郚ずしお、詳现に立ち入りたくない

ずころで、.Net 4.5では、クレヌムベヌスのIDずWIFが山の王になりたした。 すべおのタむプ*プリンシパルはClaimsPrincipalから継承され、内郚のKerberosトヌクンには䞀連のステヌトメントなどが含たれたす。 誰かがこのトピックに興味を持っおいるなら、コメントにあなたの垌望を曞いおください。私はきっず時間を曞きたす。



䟿利なリンク

1. msdn.microsoft.com/en-us/security/aa570351.aspx-MSDNのペヌゞ。

2. claimid.codeplex.com-コヌド䟋ず無料の本。

3. leastprivilege.com -Dominick Baierブログ。

4.github.com/thinktecture/Thinktecture.IdentityServer-オヌプン゜ヌスのIdentity Server。



PS。 レビュヌを提䟛しおくれたXaocCPSに感謝したす。



All Articles