Blazor入门100天 : 身份验证和授权 (1) - 建立带身份验证工程

38 篇文章 10 订阅
30 篇文章 4 订阅

目录

  1. 建立默认带身份验证 Blazor 程序
  2. 角色/组件/特性/过程逻辑
  3. DB 改 Sqlite
  4. 将自定义字段添加到用户表
  5. 脚手架拉取IDS文件,本地化资源
  6. freesql 生成实体类,freesql 管理ids数据表
  7. 初始化 Roles,freesql 外键 => 导航属性
  8. 完善 freesql 和 bb 特性

知识点

  1. Microsoft.AspNetCore.Identity
  2. EntityFramework SqlServer/Sqlite
  3. Authorization
  4. IDS将自定义字段添加到用户表
  5. 脚手架拉取IDS文件,本地化资源
  6. freesql 生成实体类
  7. bb 特性

本节源码

https://github.com/densen2014/Blazor100/tree/Blazor-%E6%95%99%E7%A8%8B15-1/b15blazorIDS

新建 Blazor Server 应用

名称身份验证类型
b15blazorIDS个人账户

建立后大概这样的目录结构

默认使用appsettings.json文件的ConnectionStrings.DefaultConnection作为IDS数据库连接

首次运行

点击 Register 注册账号
EmailPasswordConfirm Password
test@test.com1qaz@WSX1qaz@WSX

默认强制使用复杂密码策略,先跑一轮默认的,之后再改策略方便调试

出现A database operation failed while processing the request.提示, 点击 Apply Migrations按钮

正确完成后,显示如下界面,刷新页面即可. 出错的话参考VS提示操作,也可以文章后留言我再具体分享除错步骤

点击 Click here to confirm your account

完成账号注册

点击Login按钮登录账号

现在已经成功登录了

注: 默认localdb数据库路径

本节源码

https://github.com/densen2014/Blazor100/tree/Blazor-%E6%95%99%E7%A8%8B15-1/b15blazorIDS

源代码

https://github.com/densen2014/Blazor100

https://gitee.com/densen2014/Blazor100 (镜像/非最新版)

关联项目

FreeSql QQ群:4336577

BA & Blazor QQ群:795206915

Maui Blazor 中文社区 QQ群:645660665

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow,不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

转载声明

本文来自博客园,作者:周创琳 AlexChow,转载请注明原文链接.

AlexChow

今日头条 | 博客园 | 知乎 | Gitee | GitHub

image

Blazor Server是一种基于ASP.NET Core的Web开发框架,它允许您使用C#语言开发现代Web应用程序。在Blazor Server中,您可以使用cookie认证授权或JWT认证授权来保护您的应用程序。 ### Blazor Server Cookie认证授权 Blazor Server中的cookie认证授权与ASP.NET Core中的cookie认证授权非常相似。您可以使用ASP.NET Core Identity来管理用户和角色,并使用`[Authorize]`属性来标记需要授权才能访问的组件。 首先,您需要在ASP.NET Core应用程序中启用身份验证授权。然后,您可以使用Identity提供的API来管理用户和角色。 接下来,您需要在Blazor组件中使用`[Authorize]`属性来标记需要授权才能访问的组件。这将要求用户登录,并检查他们是否具有访问该组件的权限。 最后,您可以使用`HttpContext`类来访问当前用户的身份信息,以及验证他们是否具有所需的角色和权限。 下面是一个示例,演示如何在Blazor Server应用程序中使用cookie认证授权: ``` @page "/myprotectedpage" @attribute [Authorize(Roles = "Admin")] <h1>Welcome to the protected page!</h1> @code { [Inject] private IHttpContextAccessor HttpContextAccessor { get; set; } private ClaimsPrincipal User => HttpContextAccessor.HttpContext.User; protected override async Task OnInitializedAsync() { // Check if the user has the required role if (!User.IsInRole("Admin")) { NavigationManager.NavigateTo("/accessdenied"); } } } ``` 在上面的示例中,我们使用`[Authorize(Roles = "Admin")]`属性来标记需要“Admin”角色才能访问的组件。然后,我们使用`IHttpContextAccessor`来访问当前用户的身份信息,并检查他们是否具有所需的角色。如果用户没有所需的角色,我们将重定向到一个名为“accessdenied”的页面。 ### Blazor Server JWT认证授权 Blazor Server中的JWT认证授权Blazor WebAssembly中的JWT认证授权非常相似。您可以使用ASP.NET Core Identity和JSON Web Token(JWT)来实现JWT认证授权,并使用`[Authorize]`属性来标记需要授权才能访问的组件。 首先,您需要在ASP.NET Core应用程序中配置JWT认证服务。然后,您可以使用Identity提供的API来管理用户和角色,以及实现基于角色的授权策略。 接下来,您需要在Blazor组件中使用`[Authorize]`属性来标记需要授权才能访问的组件。这将要求用户登录,并检查他们是否具有访问该组件的权限。 最后,您可以使用JWT来验证用户身份,并根据用户的角色和权限来授权访问。 下面是一个示例,演示如何在Blazor Server应用程序中使用JWT认证授权: ``` @page "/myprotectedpage" @attribute [Authorize(Roles = "Admin")] <h1>Welcome to the protected page!</h1> @code { [Inject] private IAccessTokenProvider TokenProvider { get; set; } private async Task<string> GetAccessTokenAsync() { var tokenResult = await TokenProvider.RequestAccessToken(); if (tokenResult.TryGetToken(out var token)) { return token.Value; } else { return null; } } protected override async Task OnInitializedAsync() { var accessToken = await GetAccessTokenAsync(); if (accessToken != null) { // Verify the token and extract the user's claims var handler = new JwtSecurityTokenHandler(); var token = handler.ReadJwtToken(accessToken); var userId = token.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value; var roles = token.Claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).ToList(); // Check if the user has the required role if (!roles.Contains("Admin")) { NavigationManager.NavigateTo("/accessdenied"); } } else { NavigationManager.NavigateTo("/login"); } } } ``` 在上面的示例中,我们使用`[Authorize(Roles = "Admin")]`属性来标记需要“Admin”角色才能访问的组件。然后,我们使用`IAccessTokenProvider`来获取JWT访问令牌,并验证令牌以确定用户的身份和角色。如果用户没有所需的角色,我们将重定向到一个名为“accessdenied”的页面。 希望这些示例能够帮助您实现Blazor Server中的cookie认证授权和JWT认证授权
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Densen2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值