当前位置:网站首页>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 .
边栏推荐
- os. Path built-in module
- Googgle guava ImmutableCollections
- First knowledge of spark - 7000 words +15 diagrams, and learn the basic knowledge of spark
- Serialization oriented - pickle library, JSON Library
- PKCs 5: password based cryptography specification version 2.1 Chinese Translation
- 'using an alias column in the where clause in PostgreSQL' - using an alias column in the where clause in PostgreSQL
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 5
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 21
- MPLS experiment
- [the way of programmer training] - 2 Perfect number calculation
猜你喜欢
How to judge the advantages and disadvantages of low code products in the market?
[notes] in depth explanation of assets, resources and assetbundles
Function parameters (positional parameters, default value parameters, variable parameters, named keyword parameters, keyword parameters)
2018 meisai modeling summary +latex standard meisai template sharing
2021-08-09
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 23
netstat
Here, the DDS tutorial you want | first experience of fastdds - source code compilation & Installation & Testing
IPv6 experiment
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 9
随机推荐
Clockwise rotation method of event arrangement -- PHP implementation
Complementary knowledge of auto encoder
TCP slicing and PSH understanding
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15
Experiment 7. IPv6
Force buckle 142 Circular linked list II
Btrace tells you how to debug online without restarting the JVM
Properties and methods of OS Library
In 2022, financial products are not guaranteed?
Global and Chinese market of dental elevators 2022-2028: Research Report on technology, participants, trends, market size and share
The solution of permission denied
World document to picture
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 19
Azure solution: how can third-party tools call azure blob storage to store data?
Iframe to only show a certain part of the page
Detailed explanation of classic process synchronization problems
Workplace liquor bureau must pay attention to
Common built-in modules
os. Path built-in module
Entitas learning [iv] other common knowledge points