asp.net core3.1 cookieとjwtのハイブリッド認証による多様な認証ソリューションの実現
asp.net core 3.1を使って社内システムを開発。開発では、シンプルなCookie認証方式でユーザー認証を行い、データを呼び出すために他のシステムとのインターフェースをいくつか書くように開発しました。そして、ほんのいくつかの簡単なインターフェイスは、サイトを再デプロイする準備ができていないので、それは直接MVCプロジェクトでインターフェイスを記述するためのAPI領域を追加することである。それはあなたが認証するためにクッキーの方法を使用することはできませんので、インタフェースであるため、この時間は、認証を認証するために様々な認証方式を使用して、jwtの認証を追加する必要があります。
認証のオーソリゼーション
認証は、ユーザーのアイデンティティを決定するプロセスです。認可は、ユーザーがリソースにアクセスできるかどうかを決定するプロセスです。ASP.NET Coreでは、認証はIAuthenticationServiceによって処理され、このサービスは認証ミドルウェアによって使用されます。認証サービスは、登録された認証ハンドラを使用して、認証関連の処理を行います。
認証-->権限付与
認証と認可については、認証と認可は2つの概念であることを区別する必要があり、MSDN公式ドキュメントを確認するか、他の記事を検索してください。OAuth 2.0やjwt関連の知識も含め、多くの情報と良い解説があります。 {OAuthの概念の一部を紹介します。
認証
認証スキームは、Startup.ConfigureServicesで登録した認証サービスによって指定されます。
その方法は、services.AddAuthentication を呼び出した後に、スキーム固有の拡張メソッド (AddJwtBearer や AddCookie など) を呼び出すことです。これらの拡張メソッドは、AuthenticationBuilder を使用して、適切な設定でスキームを登録します。
Cookie JwtBearer認証スキームの追加
command[zccheck_disk]=/usr/local/nagios/libexec/zccheck_disk.pl -w 90 -c 95
JwtBearer認証の設定パラメータ class JwtConfig
#yum install sysstat
appsettings.jsonの設定パラメータ
/etc/init.d/sysstat start
認証ミドルウェアの追加
アプリケーションのIApplicationBuilderでUseAuthentication拡張メソッドを呼び出すことで、Startup.Configureに認証ミドルウェアを追加します。UseAuthentication を呼び出すと、先に登録した認証スキームを使用する中間セクションが登録されます。UseAuthenticationは、認証されるユーザーに依存する全てのミドルウェアの前に呼び出してください。エンドポイントルーティングを使用している場合、以下の順序でUseAuthenticationを呼び出す必要があります。
- ルーティング情報を認証の決定に使用できるように、UseRoutingの後に呼び出される。 {を使用します。 UseEndpointsの前に呼び出され、ユーザーは認証された後でのみエンドポイントにアクセスできるようになります。
{コード
クッキー認証
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseSession();
app.UseRouting();
//Enable authentication middleware
app.UseAuthentication();
//Enable authorization middleware
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
jwt認証
[HttpPost]
public async Task<NewtonsoftJsonResult> LoginIn(string userName, string userPassword, string code)
{
AjaxResult objAjaxResult = new AjaxResult();
var user = _userBll.GetUser(userName, userPassword);
if (user == null)
{
objAjaxResult.Result = DoResult.NoAuthorization;
objAjaxResult.PromptMsg = "Username or password error";
}
else
{
var claims = new List<Claim>
{
new Claim("userName", userName),
new Claim("userID",user.Id.ToString()),
};
await HttpContext.SignInAsync(new ClaimsPrincipal(new ClaimsIdentity(claims,CookieAuthenticationDefaults.AuthenticationScheme)));
objAjaxResult.Result = DoResult.Success;
objAjaxResult.PromptMsg = "Login successful";
}
return new NewtonsoftJsonResult(objAjaxResult);
}
オーソライズ
認可時に、アプリケーションは使用するハンドラを指定します。アプリケーションが認証スキームのカンマ区切りリストを介して着信認証に渡すハンドラ[Authorize]を選択します。Authorize] 属性は、デフォルトが設定されているかどうかにかかわらず、使用する認証スキーム (複数可) を指定します。
デフォルトの認証
上記の認証設定において、デフォルトの構成としてクッキーを使用しているため、フロントエンドの対応するコントローラは認証スキームを指定する必要がなく、[Authorize]と入力すればよいことになります。
オーソライズを選択
APIインターフェースにはJwt認証を使用し、Controllerに指定されたスキームを入力します。
[HttpPost]
public NewtonsoftJsonResult Token([FromBody] UserInfo model)
{
AjaxResult objAjaxResult = new AjaxResult();
var user = _userBll.GetUser(model.UserName, model.Password);
if (user == null)
{
objAjaxResult.Result = DoResult.NoAuthorization;
objAjaxResult.PromptMsg = "Username or password error";
}
else
{
//jwtTokenOptions is configured to get information about the parameters configured above
var jwtTokenOptions = BaseConfigModel.jwtConfig;
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtTokenOptions.SigningKey));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
//identity
var claims = new List<Claim>
{
new Claim("userID",user.Id.ToString()),
new Claim("userName",user.UserName),
};
//Token
var expires = DateTime.Now.AddMinutes(jwtTokenOptions.Expires);
var token = new JwtSecurityToken(
issuer: jwtTokenOptions,
Audience: jwtTokenOptions,
Audience, claims: claims,
notBefore: DateTime,
Now, expires: expires,
signingCredentials: credentials
);
string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
objAjaxResult.Result = DoResult.Success;
objAjaxResult.RetValue = new
{
token = jwtToken
};
objAjaxResult.PromptMsg = "Login successful";
}
return new NewtonsoftJsonResult(objAjaxResult);
}
画像
概要
複数の番組が混在する場合の認証プロセスについて。
1. 認証スキームを設定する(関連する設定パラメータは、設定ファイルの形式でもよい)。
2、認可検証ミドルウェアを追加する。
3、認証インターフェースを提供する。
4. 4. 認証が必要なインターフェイスの認証スキームを設定します。
この記事はasp.net core3.1クッキーとjwtのハイブリッド認証の認可で、様々な認証方式を実現するために導入され、より関連するasp.net coreクッキーとjwt認証の認可内容は、スクリプトホーム以前の記事を検索するか、次の関連記事を閲覧し続けてくださいあなたはスクリプトホームをよりサポートしてくれることを願っています!...
関連
-
.netcoreプロジェクトでIStartupFilterを使用するためのチュートリアル
-
.NET 6:.NETのロギングコンポーネントlog4netを使用する。
-
NETガベージコレクション GC診断ツール dotnet-gcmon 使用方法
-
ASP.NET CoreでURLを設定する5つの方法
-
30分でわかるコング経由の.NETゲートウェイ
-
net core downlink tracking skywalking インストールと使いやすいチュートリアル
-
swagger uiをasp.net coreに統合する原理
-
認証プロセスの記録にjwtを使用したネット
-
再起動を伴わないNET5の設定変更は自動的に反映される
-
非同期タスクキャンセルと監視のネット実装
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonでpillowをインストールする3つの方法
-
ASP.NET Core Dependency Injectionフレームワークの活用
-
ASP.NET Core ディペンデンシーインジェクションの詳細
-
ASP.NET Coreミドルウェアによるグローバル例外処理機構の利用について
-
ASP.NET学習でよくあるエラーのまとめ
-
ASP.NETでWeb.configからログインする際の正しいアカウントパスワードを確認する
-
NET 6 の今後の新機能 暗黙の名前空間参照
-
ASP.NET Coreで複数のサービス実装クラスをインジェクトする方法
-
Net CoreによるAutoFacの利用
-
ajaxでポップアップアラートボックス