当前位置:网站首页>asp. Core is compatible with both JWT authentication and cookies authentication
asp. Core is compatible with both JWT authentication and cookies authentication
2022-07-04 12:29:00 【Illusory private school】
Python Wechat ordering applet course video
https://edu.csdn.net/course/detail/36074
Python Actual quantitative transaction financial management system
https://edu.csdn.net/course/detail/35475
In practical use , May come across ,aspi Interface verification and view Login verification of the page .asp.core It also supports two compatible .
First, in the startup.cs Enable Authentication .
var secrityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SecurityKey"]));
services.AddSingleton(secrityKey);
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(option => //cookies The way
{
option.LoginPath = "/Login";
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => //jwt The way
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,// Whether the validation Issuer
ValidateAudience = true,// Whether the validation Audience
ValidateLifetime = true,// Is the failure time verified
ClockSkew = TimeSpan.FromSeconds(30),
ValidateIssuerSigningKey = true,// Whether the validation SecurityKey
ValidAudience = Configuration["JWTDomain"],//Audience
ValidIssuer = Configuration["JWTDomain"],//Issuer
IssuerSigningKey = secrityKey// Get SecurityKey
};
});
Configure Method must be added
app.UseAuthentication(); // to grant authorization
app.UseAuthorization(); // authentication Authentication methods include user name and password authentication
app.MapWhen(context =>
{
var excludeUrl = new string[] { "/api/login/getinfo", "/api/login/login", "/api/login/modifypwd" }; // Pay attention to lowercase
return context.Request.Path.HasValue
&& context.Request.Path.Value.Contains("Login")
&& context.Request.Headers.ContainsKey("Authorization")
&& !(excludeUrl.Contains(context.Request.Path.Value.ToLower()));
}, \_app =>
{
\_app.Use(async (context, next) =>
{
context.Response.StatusCode = 401;
});
});
stay login page , Background code
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | var
uid = Request.Form[``"code"``] +
""``;``var
pwd = Request.Form[``"pwd"``] +
""``;
var
info = _mysql.users.Where(m => m.user_code == uid&&m.delflag==0).FirstOrDefault();``if
(info ==
null``)``{``return
new
JsonResult(``new``{``success =
false``,``msg =
" The user doesn't exist "``});``}``if
(info.pwd != pwd)``{``return
new
JsonResult(``new``{``success =
false``,``msg =
" Incorrect user password "``});``}
// Create an authentication ``var
claims =
new
List() {``new
Claim(ClaimTypes.Sid,info.id),
// user ID``new
Claim(ClaimTypes.Name,info.user_code)
// User name ``};``var
claimsIdentity =
new
ClaimsIdentity(``claims, CookieAuthenticationDefaults.AuthenticationScheme);``//var identity = new ClaimsIdentity(claims, "Login");``//var userPrincipal = new ClaimsPrincipal(identity);``//HttpContext.SignInAsync("MyCookieAuthenticationScheme", userPrincipal, new AuthenticationProperties``//{``// ExpiresUtc = DateTime.UtcNow.AddMinutes(30),``// IsPersistent = true``//}).Wait();
var
authProperties =
new
AuthenticationProperties``{``//AllowRefresh = ,``// Refreshing the authentication session should be allowed.``ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60),``// The time at which the authentication ticket expires. A
// value set here overrides the ExpireTimeSpan option of
// CookieAuthenticationOptions set with AddCookie.``IsPersistent =
true``,``// Whether the authentication session is persisted across
// multiple requests. When used with cookies, controls``// whether the cookie's lifetime is absolute (matching the``// lifetime of the authentication ticket) or session-based.
//IssuedUtc = ,``// The time at which the authentication ticket was issued.
//RedirectUri =
// The full path or absolute URI to be used as an http
// redirect response value.``};
await HttpContext.SignInAsync(``CookieAuthenticationDefaults.AuthenticationScheme,``new
ClaimsPrincipal(claimsIdentity),``authProperties);
|
Controler Controller part , Login code :
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | [HttpPost(``"Login"``)]``public
async Task Login(getdata \_getdata)``{``var
userName = _getdata.username;``var
passWord = _getdata.password;``var
info = _mysql.users.Where(m => m.user_code == userName && m.delflag == 0).FirstOrDefault();``if
(info ==
null``)``{``return
new
JsonResult(``new``{``state =
false``,``code = -1,``data =
""``,``msg =
" The username does not exist !"``});``}``if
(CommonOp.MD5Hash(info.pwd).ToLower() != passWord)``{``return
new
JsonResult(``new``{``state =
false``,``code = -2,``data =
""``,``msg =
" Incorrect user password !"``});``}
#region Identity authentication processing ``var
secrityKey =
new
SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config[``"SecurityKey"``]));``List claims =
new
List();``claims.Add(``new
Claim(``"user_code"``, info.user_code));``claims.Add(``new
Claim(``"id"``, info.id));
var
creds =
new
SigningCredentials(secrityKey, SecurityAlgorithms.HmacSha256);``var
token =
new
JwtSecurityToken(``issuer: _config[``"JWTDomain"``],``audience: _config[``"JWTDomain"``],``claims: claims,``expires: DateTime.Now.AddMinutes(120),``signingCredentials: creds);
return
new
JsonResult(``new``{``state =
true``,``code = 0,``data =
new
JwtSecurityTokenHandler().WriteToken(token),``msg =
" obtain token success "
});``#endregion``}
|
Be careful , Authenticated controller part , Add the following attribute header , It will take effect .
| 12345 | **[Authorize(AuthenticationSchemes =**
"Bearer,Cookies"``)]``public
class
ControllerCommonBase : ControllerBase``{
}
|
Such a Controler controller , It can be compatible with two modes .
边栏推荐
- DDS-YYDS
- [Android reverse] function interception instance (③ refresh CPU cache | ④ process interception function | ⑤ return specific results)
- Ml and NLP are still developing rapidly in 2021. Deepmind scientists recently summarized 15 bright research directions in the past year. Come and see which direction is suitable for your new pit
- (August 10, 2021) web crawler learning - Chinese University ranking directed crawler
- How to judge the advantages and disadvantages of low code products in the market?
- Exness: positive I win, negative you lose
- Source code analysis of the implementation mechanism of multisets in guava class library
- How to create a new virtual machine
- Introduction of network security research direction of Shanghai Jiaotong University
- Clion configuration of opencv
猜你喜欢
Data communication and network: ch13 Ethernet
[the way of programmer training] - 2 Perfect number calculation
Function parameters (positional parameters, default value parameters, variable parameters, named keyword parameters, keyword parameters)
Method of setting default items in C # ComboBox control code
Clion configuration of opencv
vim 出现 Another program may be editing the same file. If this is the case 的解决方法
01. Basics - MySQL overview
Review of week 278 of leetcode II
Awk getting started to proficient series - awk quick start
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 13
随机推荐
Entitas learning [3] multi context system
Reptile learning 4 winter vacation learning series (1)
The database connection code determines whether the account password is correct, but the correct account password always jumps to the failure page with wrong account password
Common tips
SAP ui5 date type sap ui. model. type. Analysis of the display format of date
Tableau makes data summary after linking the database, and summary exceptions occasionally occur.
MySQL performance optimization index
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11
Possible to restore a backup of SQL Server 2014 on SQL Server 2012?
Clockwise rotation method of event arrangement -- PHP implementation
netstat
It's hard to hear C language? Why don't you take a look at this (V) pointer
Classification and application of AI chips
About the use of URL, href, SRC attributes
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 9
Global and Chinese market of dental elevators 2022-2028: Research Report on technology, participants, trends, market size and share
Clion configuration of opencv
Sys module
Summary of Shanghai Jiaotong University postgraduate entrance examination module -- cryptography
Servlet learning notes