国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - asp.net core2.2多用戶驗證與授權示例詳解

asp.net core2.2多用戶驗證與授權示例詳解

2020-06-06 16:26毛毛蟲 ASP.NET教程

這篇文章主要給大家介紹了關于asp.net core2.2多用戶驗證與授權的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

asp.net core2.2 用戶驗證 和授權有很詳細和特貼心的介紹,我感興趣的主要是這兩篇:

我的項目有兩類用戶:

  • 微信公眾號用戶,用戶名為公眾號的openid
  • 企業微信的用戶,用戶名為企業微信的userid

每類用戶中部分人員具有“Admin”角色

因為企業微信的用戶有可能同時是微信公眾號用戶,即一個人兩個名,所以需要多用戶驗證和授權。咱用代碼說話最簡潔,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class DemoController : Controller
{
 /// <summary>
 /// 企業微信用戶使用的模塊
 /// </summary>
 /// <returns></returns>
 public IActionResult Work()
 {
 return Content(User.Identity.Name +User.IsInRole("Admin"));
 }
 /// <summary>
 /// 企業微信管理員使用的模塊
 /// </summary>
 /// <returns></returns>
 public IActionResult WorkAdmin()
 {
 return Content(User.Identity.Name + User.IsInRole("Admin"));
 }
 /// <summary>
 /// 微信公眾號用戶使用的模塊
 /// </summary>
 /// <returns></returns>
 public IActionResult Mp()
 {
 return Content(User.Identity.Name + User.IsInRole("Admin"));
 }
 /// <summary>
 /// 微信公眾號管理員使用的模塊
 /// </summary>
 /// <returns></returns>
 public IActionResult MpAdmin()
 {
 return Content(User.Identity.Name + User.IsInRole("Admin"));
 }
}

下面咱一步一步實現。

第一步 改造類Startup

修改ConfigureServices方法,加入以下代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
services.AddAuthentication
 (
 "Work" //就是設置一個缺省的cookie驗證的名字,缺省的意思就是需要寫的時候可以不寫。另外很多時候用CookieAuthenticationDefaults.AuthenticationScheme,這玩意就是字符串常量“Cookies”,
 )
 .AddCookie
 (
 "Work", //cookie驗證的名字,“Work”可以省略,因為是缺省名
 option =>
 {
  option.LoginPath = new PathString("/Demo/WorkLogin"); //設置驗證的路徑
  option.AccessDeniedPath= new PathString("/Demo/WorkDenied");//設置無授權訪問跳轉的路徑
 }).AddCookie("Mp", option =>
 {
  option.LoginPath = new PathString("/Demo/MpLogin");
  option.AccessDeniedPath = new PathString("/Demo/MpDenied");
 });

修改Configure方法,加入以下代碼

?
1
app.UseAuthentication();

第二步 添加驗證

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public async Task WorkLogin(string returnUrl)
{
 var claims = new List<Claim>
 {
  new Claim(ClaimTypes.Name, "UserId"),
  new Claim(ClaimTypes.Role, "Admin") //如果是管理員
 };
 
 var claimsIdentity = new ClaimsIdentity(claims, "Work");//“,"Work"”可以省略,因為是缺省名
 
 var authProperties = new AuthenticationProperties
 {
  AllowRefresh = true,
  //ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
  // The time at which the authentication ticket expires. A
  // value set here overrides the ExpireTimeSpan option of
  // CookieAuthenticationOptions set with AddCookie.
  IsPersistent = false, //持久化保存,到底什么意思我也不太清楚,哪位兄弟清楚的話,盼解釋
  //IssuedUtc = <DateTimeOffset>,
  // The time at which the authentication ticket was issued.
  RedirectUri = returnUrl ?? "/Demo/Work"
 };
 
 await HttpContext.SignInAsync("Work", new ClaimsPrincipal(claimsIdentity), authProperties);
}
public IActionResult WorkDenied()
{
 return Forbid();
}
 
 
public async Task MpLogin(string returnUrl)
{
 var claims = new List<Claim>
 {
  new Claim(ClaimTypes.Name, "OpenId"),
  new Claim(ClaimTypes.Role, "Admin") //如果是管理員
 };
 
 var claimsIdentity = new ClaimsIdentity(claims, "Mp");//“,"Mp"”不能省略,因為不是缺省名
 
 var authProperties = new AuthenticationProperties
 {
  AllowRefresh = true,
  IsPersistent = false,
  RedirectUri = returnUrl ?? "/Demo/Mp"
 };
 
 await HttpContext.SignInAsync("Mp", new ClaimsPrincipal(claimsIdentity), authProperties);
}
public IActionResult MpDenied()
{
 return Forbid();
}

第三步 添加授權

就是在對應的Action前面加[Authorize]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/// <summary>
/// 企業微信用戶使用的模塊
/// </summary>
/// <returns></returns>
[Authorize(
 AuthenticationSchemes ="Work" //缺省名可以省略
 )]
public IActionResult Work()
{
 return Content(User.Identity.Name + User.IsInRole("Admin"));
}
/// <summary>
/// 企業微信管理員使用的模塊
/// </summary>
/// <returns></returns>
[Authorize(AuthenticationSchemes ="Work",Roles ="Admin")]
public IActionResult WorkAdmin()
{
 return Content(User.Identity.Name + User.IsInRole("Admin"));
}
/// <summary>
/// 微信公眾號用戶使用的模塊
/// </summary>
/// <returns></returns>
[Authorize(AuthenticationSchemes ="Mp")]
public IActionResult Mp()
{
 return Content(User.Identity.Name + User.IsInRole("Admin"));
}
/// <summary>
/// 微信公眾號管理員使用的模塊
/// </summary>
/// <returns></returns>
[Authorize(AuthenticationSchemes ="Mp",Roles ="Admin")]
public IActionResult MpAdmin()
{
 return Content(User.Identity.Name + User.IsInRole("Admin"));
}

Ctrl+F5運行,截屏如下:

asp.net core2.2多用戶驗證與授權示例詳解

asp.net core2.2多用戶驗證與授權示例詳解

asp.net core2.2多用戶驗證與授權示例詳解

 


asp.net core2.2多用戶驗證與授權示例詳解

最后,講講碰到的坑和求助

一開始的驗證的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public async Task<IActionResult> Login(string returnUrl)
{
 var claims = new List<Claim>
 {
  new Claim(ClaimTypes.Name, "UserId"),
  new Claim(ClaimTypes.Role, "Admin") //如果是管理員
 };
 
 var claimsIdentity = new ClaimsIdentity(claims, "Work");//“,"Work"”可以省略,因為是缺省名
 
 var authProperties = new AuthenticationProperties
 {
  //AllowRefresh = true,
  //IsPersistent = false,
  //RedirectUri
 };
 
 await HttpContext.SignInAsync("Work", new ClaimsPrincipal(claimsIdentity), authProperties);
 
 return Content("OK");
}
  • 返回類型為Task<IActionResult> ,因為懶得寫View,順手寫了句return Content("OK");
  • 從網站復制過來代碼,AuthenticationProperties沒有設置任何內容

運行起來以后不停的調用login,百度了半天,改了各種代碼,最后把return Content("OK");改成return RedirectToAction("Index");一切OK!

揣摩原因可能是當 return Content("OK");時,自動調用AuthenticationProperties的RedirectUri,而RedirectUri為空時,自動調用自己。也不知道對不對。

這時候重視起RedirectUri,本來就要返回到returnUrl,是不是給RedirectUri賦值returnUrl就能自動跳轉?

確實,return Content("OK");時候自動跳轉了,return RedirectToAction("Index");無效。

最后把Task<IActionResult> 改成Task ,把return ...刪除,一切完美!(弱弱問一句,是不是原來就應該這樣寫?我一直在走彎路?)

求助

User有屬性Identities,看起來可以有多個Identity,如何有?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/catzhou/p/10243069.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: yellow在线视频免费观看 | 国产精品123区 | 免费黄色大片网址 | 国产91久久久 | 成人在线视频免费 | 国产精品福利在线 | baoyu123成人免费看视频 | 亚洲经典一区 | 精品中文字幕在线 | 91精品国产综合久久婷婷香蕉 | 国内自拍视频在线观看 | 国产成人一区二区三区 | 人人干天天干 | 国产欧美精品一区二区色综合 | 转生成为史莱姆这档事第四季在线观看 | 午夜成人免费视频 | 亚洲精品国偷拍自产在线观看 | 中文字幕亚洲一区二区三区 | 亚洲天堂网站 | av软件在线 | 日韩视频中文字幕 | 精品国产欧美一区二区三区成人 | 亚洲一区二区在线播放 | 欧美一区二区三区视频在线观看 | 亚洲91| 久久精品一区二区三区四区 | 99免费在线视频 | 毛片一区 | 欧美一区二区三区精品 | 在线一级毛片 | 中文字幕 国产 | 激情免费视频 | 欧美精品系列 | 久久a国产 | 伊人网视频 | 理论影院 | 午夜激情视频在线观看 | 久久成人精品视频 | 一区二区免费 | a在线观看 | 久草中文在线 |