検索

ASP.NET Core での ID の概要

Mar 12, 2017 pm 04:30 PM

前書き

ASP.NET Core では、ASP.NET の Identity コンポーネント ライブラリが引き続き使用されており、これはユーザーの ID を認証する役割を果たします。一般的に、MVC 5 ほど複雑ではありません。 MVC OWIN は 5 で導入されたため、多くの初心者は学習に苦労し、Identity について混乱しています。私もその 1 つで、Identity の内部原理を理解するのに前後 1 か月以上費やしたことがあります。したがって、ほとんどの開発者は Identity に愛情を持っておらず、誘拐されたように感じています。

ありがたいことに、ASP.NET Core では、モジュールの抽象化と ミドルウェア の使用により、Identity の学習と使用ルートがよりわかりやすくなりました。一緒に見てみましょう。

はじめに

始める前に、Entity Framework との関係、および Authentication との関係を忘れてみましょう。まず、いくつかの英単語を学びましょう。 Entity Framework的关系,也忘记它和Authentication的关系,我们先学习几个英语单词。

有这么几个“单词”你可能需要弄明白:

# 1: Claims

大家应该都知道身份证长什么样子的,如下:

ASP.NET Core での ID の概要

其中,姓名:奥巴马;性别:男;民族:肯尼亚;出生:1961.08.04,等等这些身份信息,可以看出都是一个一个的键值对,那如果我们想在程序中存这些东西,怎么样来设计呢?对,你可能想到了使用一个字典进行存储,一个Key,一个Value刚好满足需求。但是Key,Value的话感觉不太友好,不太面向对象,所以如果我们做成一个对象的话,是不是更好一些呢?最起码你可以用vs的智能提示了吧,我们修改一下,改成下面这样:

//我给对象取一个名字叫`Claim`你没有意见吧
public class Claim
{
    public string ClaimType { get; set; }

    public string ClaimValue { get; set; }
}

ClaimType 就是Key,ClaimValue就代表一个Value。这样的话,刚好可以存储一个键值对。这时候姓名:奥巴马是不是可以存进去了。

微软的人很贴心,给我们准备了一些默认的ClaimType呢?很多常用的都在里面呢,一起看看吧:

这里延伸第一个知识点:ClaimTypes

ASP.NET Core での ID の概要

为了阅读体验,截图我只放了一部分哦。可以看到有什么Name,Email,Gender,MobilePhone等常用的都已经有了,其他的还有很多。细心的读者可能注意了,它的命名空间System.Security.Claims理解する必要がある「単語

」がたくさんあります:

# 1: クレーム

ID カードが次のようにどのようなものかを誰もが知っているはずです:

ASP.NET Core での ID の概要

その中で、

名前: オバマ; 性別: 男性; 民族: ケニア; birth

: 1961.08.04 など。これらの ID 情報はすべてキーと値のペアであることがわかります。では、これらをプログラムに格納したい場合、どのように設計すればよいでしょうか。はい、ストレージ用の辞書、キー

、および値を満たすものを使用することを考えたことがあるかもしれません。ニーズ。しかし、Key と Value はあまりユーザーフレンドリーではなく、オブジェクト指向的ではないので、これを対象だったら、その方が良いんじゃないでしょうか?少なくとも vs のスマート プロンプトを使用できます。これを修正して次のように変更しましょう:

public class ClaimsIdentity
{
    public ClaimsIdentity(IEnumerable<claim> claims){}
    
    //名字这么重要,当然不能让别人随便改啊,所以我不许 set,除了我儿子跟我姓,所以是 virtual 的
    public virtual string Name { get; }
    public string Label { get; set; }
    
    //这是我的证件类型,也很重要,同样不许 set
    public virtual string AuthenticationType { get; }
    
    public virtual void AddClaim(Claim claim);
    
    public virtual void RemoveClaim(Claim claim);
    
    public virtual void FindClaim(Claim claim);
}</claim>
🎜ClaimType は Key、ClaimValue は値を表します。この場合、保存できるキーと値のペアは 1 つだけです。この時点で、名前: オバマ を保存できますか? 🎜🎜Microsoft の人々は非常に思いやりがあり、デフォルトの ClaimType をいくつか用意してくれました。よく使用される多くのものが含まれています。見てみましょう: 🎜
🎜これは最初の知識ポイントの拡張です: ClaimTypes🎜
🎜ASP.NET Core での ID の概要🎜🎜読書体験のために、スクリーンショットの一部のみを含めました。名前、メール🎜、Gend🎜er、MobilePhone、その他の一般的に使用されるものはすでに利用可能であり、他にもたくさんあります。注意深い読者は、その 名前空間 🎜 が System.Security.Claims code> であることに気づいたかもしれません。つまり、これは .net 🎜framework🎜 の一部であるということです。当面はこれだけ知っておく必要があります。 🎜🎜はじめに🎜の説明は完了しました。他の場所でどのように翻訳されているかは気にしません。この記事では「🎜証明書ユニット🎜」と呼ばれています。 🎜🎜🎜# 2: ClaimsIdentity🎜🎜🎜「🎜Certificate Unit🎜」を取得したら、それを使用して ID カードを作成できますが、どのように作成すればよいでしょうか?生徒の中には、「はい、新しいオブジェクトを作成して、ID カード ユニットを 🎜コンストラクター🎜 に転送するだけで、ID カードが取得できる」と考えた人もいるかもしれません。この ID カードに「🎜ClaimsIdentity🎜」という英語名を付けました。この名前は、そのコンポーネントを表す Claim と、その目的を表す Identity の両方を備えています。 🎜🎜実際、実生活では、IDカードの情報の一部は隠されており、一部は直接見ることができます。たとえば、新世代の ID カードには、目に見えない指紋情報が保存されています。これらはすべて、ID カード内のチップに保存されています。オブジェクトを設計するときにも同様であり、何かを公開する必要があるため、ここでは ClaimsIdentity が名前、ラベルなどを公開します。 🎜<p>我们造的身份证(ClaimsIdentity)还有一个重要的<a href="http://www.php.cn/wiki/169.html" target="_blank">属性</a>就是类型(AuthenticationType),等等,AuthenticationType是什么东西?看起来有点眼熟的样子。我们知道我们自己的身份证是干嘛的吧,就是用来证明我们的身份的,在你证明身份出示它的时候,其实它有很多种形式载体的,什么意思呢?比如你可以直接拿出实体形式的身份证,那也可以是纸张形式的复印件,也可以是电子形式的电子码等等,这个时候就需要有一个能够表示其存在形式的类型字段,对,这个AuthenticationType就是干这个事情的。</p> <p>然后我们在给我们的身份证添加一些润色,让其看起来好看,比如提供一些方法添加 Claims 的,<a href="http://www.php.cn/php/php-tp-remove.html" target="_blank">删除</a> Claims的,写到二进制流里面的啊等等,最终我们的身份证对象看起来基本上是这样了:</p> <pre class="brush:php;toolbar:false">public class ClaimsIdentity {     public ClaimsIdentity(IEnumerable&lt;claim&gt; claims){}          //名字这么重要,当然不能让别人随便改啊,所以我不许 set,除了我儿子跟我姓,所以是 virtual 的     public virtual string Name { get; }     public string Label { get; set; }          //这是我的证件类型,也很重要,同样不许 set     public virtual string AuthenticationType { get; }          public virtual void AddClaim(Claim claim);          public virtual void RemoveClaim(Claim claim);          public virtual void FindClaim(Claim claim); }&lt;/claim&gt;</pre> <p>嗯,到这里,我们的<strong>身份证</strong>看起来似乎很完美了,但是从面向对象的角度来说好像还少了点什么东西? 对~,还是抽象,我们需要抽象出来一个<a href="http://www.php.cn/code/11829.html" target="_blank">接口</a>来进行一些<a href="http://www.php.cn/code/12132.html" target="_blank">约束</a>,约束什么呢?既然作为一个证件,那么肯定会涉及到这几个属性信息:<br>1、名字。2、类型。3、证件是否合法。<br>反应到接口里面的话就是如下,我们给接口取个名字叫:“<strong>身份(IIdentity)</strong>”:</p> <blockquote><p>这里延伸第二个知识点:IIdentity接口。</p></blockquote> <pre class="brush:php;toolbar:false">// 定义证件对象的基本功能。 public interface IIdentity {     //证件名称     string Name { get; }          // 用于标识证件的载体类型。     string AuthenticationType { get; }          //是否是合法的证件。     bool IsAuthenticated { get; } }</pre> <p>所以我们的 ClaimsIdentity 最终看起来定义就是这样的了:</p> <pre class="brush:php;toolbar:false">public class ClaimsIdentity : IIdentity {     //...... }</pre> <p>ClaimsIdentity 介绍完毕,是不是发现也很简单,其他地方怎么翻译我不管,在本篇文章里面,它叫 “<strong>身份证</strong>”。</p> <p><strong># 3: ClaimsPrincipal</strong></p> <p>有了身份证,我们就能证明我就是我了,有些时候一个人有很多张身份证,你猜这个人是干嘛的? 对,不是黄牛就是诈骗犯。</p> <p>但是,有些时候一个人还有其他很多种身份,你猜这个人是干嘛的?这就很正常了对不对,比如你可以同时是一名教师,母亲,商人。如果你想证明你同时有这几种身份的时候,你可能需要出示教师证,你孩子的出生证,法人代表的营业执照证。</p> <p>在程序中,一个身份证不仅仅代表你这个人了,而是代表一个身份,是证明你自己的主要身份哦。如果一个人还有其他很多种身份,这个时候就需要有一个东西(载体)来携带着这些证件了对吧?OK,我们给需要携带证件的这个对象取一个贴切点的名字,叫“<strong>证件当事人(ClaimsPrincipal)</strong>”吧。</p> <blockquote> <p>以下是 Principal 这个单词在词典给出的解释,我用它你应该没意见吧:</p> <pre class="brush:php;toolbar:false">principal  ['prɪnsəpl]   adj. 主要的;资本的 n. 首长;校长;资本;当事人</pre> </blockquote> <p>这个时候可能有同学会问了,是不是应该叫<code>ClaimsIdentityPrincipal比较好呢?嗯,我也觉得应该叫 ClaimsIdentityPrincipal 可能更好一点,或许微软的人偷懒了,简写成了ClaimsPrincipal

知道其功能后,代码就很好写了,和上面ClaimsIdentity一样的套路:

public class ClaimsPrincipal 
{
    //把拥有的证件都给当事人
    public ClaimsPrincipal(IEnumerable<claimsidentity> identities){}
    
    //当事人的主身份呢
    public virtual IIdentity Identity { get; }
    
    public virtual IEnumerable<claimsidentity> Identities { get; }
    
    public virtual void AddIdentity(ClaimsIdentity identity);
    
    //为什么没有RemoveIdentity , 留给大家思考吧?
}</claimsidentity></claimsidentity>

当时人看起来也几乎完美了,但是我们还需要对其抽象一下,抽象哪些东西呢? 作为一个当事人,你应该有一个主身份吧,就是你的身份证咯,可能你还会用到角色(角色后面会详细介绍,这里你知道有这么个东西就行了)。

这里延伸第三个知识点:IPrincipal 接口。

public interface IPrincipal
{
    //身份
    IIdentity Identity { get; }
    
    //在否属于某个角色
    bool IsInRole(string role);
}

然后,我们的 证件当事人 看起来应该是这样的:

public class ClaimsPrincipal : IPrincipal 
{
   //...
}

ClaimsPrincipal 介绍完了,也很简单吧? 其他地方怎么翻译我不管,在本篇文章里面,它叫 “证件当事人”。

想在,我们已经知道了 “证件单元(Claims)” , “身份证(ClaimsIdentity)” , “证件当事人(ClaimsPrincipal)”,并且整理清楚了他们之间的逻辑关系,趁热打铁,下面这个图是一个identity登入部分的不完全示意图,虚线圈出来的部分应该可以看懂了吧:

ASP.NET Core での ID の概要

可以看出,首先我们在app这边有一些证件单元,然后调用ClaimsIdentity把证件单元初始化为一个身份证,然后再把身份证交给证件当事人由其保管。

才把 Getting Started 写完,发现已经这么长了,所以打算写成一个系列了,可能3 - 4篇吧。

概要

さて、このブログでは最初にこの記事を紹介します。私たちはいくつかの英単語を学び、それらの英単語がプログラム内でどのようなオブジェクトを演じるのかを知りました。そして、図によれば、これらのオブジェクトが認証システム全体のどこにあるかがわかります。 ID を明確に説明したい場合は、このブログだけでは不十分であることがわかりました。次の記事では、.NET の認証システム全体を習得するまでミドルウェアを取り上げます。Identiy がどのように関係するかを見てみましょう。 Entity Framework なんて愛憎なんだろう。 .NET Authentication

このブログが役立つと思われる場合は、[おすすめ] をよろしくお願いします。.NET Core に関する情報を定期的に共有します。学習体験。

以上がASP.NET Core での ID の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース高度なC#.NETチュートリアル:次のシニア開発者インタビューをエースApr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

c#.netインタビューの質問と回答:専門知識を高めるc#.netインタビューの質問と回答:専門知識を高めるApr 07, 2025 am 12:01 AM

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

C#.NETを使用したマイクロサービスの構築:建築家向けの実用的なガイドC#.NETを使用したマイクロサービスの構築:建築家向けの実用的なガイドApr 06, 2025 am 12:08 AM

C#.NETは、その強力なエコシステムと豊富なサポートのため、マイクロサービスを構築するために人気のある選択肢です。 1)asp.netcoreを使用してRestfulapiを作成して、順序の作成とクエリを処理します。 2)GRPCを使用して、マイクロサービス間の効率的な通信を実現し、注文サービスを定義および実装します。 3)Dockerコンテナ化されたマイクロサービスを介して展開と管理を簡素化します。

C#.NETセキュリティベストプラクティス:一般的な脆弱性の防止C#.NETセキュリティベストプラクティス:一般的な脆弱性の防止Apr 05, 2025 am 12:01 AM

C#および.NETのセキュリティベストプラクティスには、入力検証、出力エンコード、例外処理、認証と承認が含まれます。 1)正規表現または組み込みのメソッドを使用して入力を検証して、悪意のあるデータがシステムに入るのを防ぎます。 2)XSS攻撃を防ぐための出力エンコード、httputility.htmlencodeメソッドを使用します。 3)例外処理により、情報の漏れが回避され、エラーが記録されますが、詳細情報はユーザーに返されません。 4)ASP.Netidentityおよび請求に基づく許可を使用して、不正アクセスから申請を保護します。

C言語で:それはどういう意味ですかC言語で:それはどういう意味ですかApr 03, 2025 pm 07:24 PM

C言語におけるコロン( ':')の意味:条件付きステートメント:条件付き式とステートメントの分離ブロックループステートメント:初期化、条件付きおよび増分式のマクロ定義の分離:マクロ名とマクロ値の分離単一行コメント:コメントアレイの寸法としてのコロンから行までのコンテンツを表す:アレイの寸法を指定する

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール