当前位置:网站首页>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 .
边栏推荐
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 18
- Translation D29 (with AC code POJ 27:mode of sequence)
- Lvs+kept highly available cluster
- Single spa, Qiankun, Friday access practice
- The solution of permission denied
- In 2022, financial products are not guaranteed?
- Lecture 9
- Global and Chinese market of dental elevators 2022-2028: Research Report on technology, participants, trends, market size and share
- Pat 1059 prime factors (25 points) prime table
- Shift EC20 mode and switch
猜你喜欢
(August 10, 2021) web crawler learning - Chinese University ranking directed crawler
Flet教程之 02 ElevatedButton高级功能(教程含源码)(教程含源码)
Detailed explanation of NPM installation and caching mechanism
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
Awk getting started to proficient series - awk quick start
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 19
[solve the error of this pointing in the applet] SetData of undefined
2021-08-09
2020 Summary - Magic year, magic me
Data communication and network: ch13 Ethernet
随机推荐
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11
2021 annual summary - it seems that I have done everything except studying hard
'using an alias column in the where clause in PostgreSQL' - using an alias column in the where clause in PostgreSQL
What if the chat record is gone? How to restore wechat chat records on Apple Mobile
[solve the error of this pointing in the applet] SetData of undefined
BCD code Baidu Encyclopedia
DVC use case (VI): Data Registry
Serialization oriented - pickle library, JSON Library
French Data Protection Agency: using Google Analytics or violating gdpr
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15
Realize cross tenant Vnet connection through azure virtual Wan
Method of setting default items in C # ComboBox control code
Data communication and network: ch13 Ethernet
The latest idea activation cracking tutorial, idea permanent activation code, the strongest in history
Uva536 binary tree reconstruction tree recovery
(2021-08-20) web crawler learning 2
About the use of URL, href, SRC attributes
os. Path built-in module
OSI seven layer reference model
Unity performance optimization reading notes - explore performance issues -profiler (2.1)