确定 SPA 和 .NET Core 3 的角色

2023-11-29

我有一个使用 .NET Core 3.1 的应用程序,还有一个使用由此生成的默认 React 应用程序的前端link.

在 .NET Core 应用程序中,我使用用户和角色设置了 Identity Server。

当我使用 React 应用程序时,我想了解用户的角色。我看到目前正在使用一个名为oidc-client.

从我在授权用户时可以调试的响应中,我看到返回了一些范围。

scope: "openid profile [Name of the app]"

这是完整的回应。

enter image description here

我如何知道该用户的角色? 我需要将其添加到我的 .NET Core 应用程序中的某个位置吗? 或者我可以从access_token在回应中?


该模板使用 ASP.NET Core Identity 来管理用户/角色。因此,第一件事就是启用角色:

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

创建自定义配置文件服务以将自定义声明包含到令牌和用户信息端点中:

public class ProfileService : IProfileService
{
    protected readonly UserManager<ApplicationUser> _userManager;


    public ProfileService(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        ApplicationUser user = await _userManager.GetUserAsync(context.Subject);

        IList<string> roles = await _userManager.GetRolesAsync(user);

        IList<Claim> roleClaims = new List<Claim>();
        foreach (string role in roles)
        {
            roleClaims.Add(new Claim(JwtClaimTypes.Role, role));
        }

        //add user claims

        roleClaims.Add(new Claim(JwtClaimTypes.Name, user.UserName));
        context.IssuedClaims.AddRange(roleClaims);
    }

    public Task IsActiveAsync(IsActiveContext context)
    {
        return Task.CompletedTask;
    }
}

并在 Startup.cs 中注册:

services.AddIdentityServer()
        .AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
        .AddProfileService<ProfileService>(); 

现在声明将包含在 userinfo 端点中,您的 React 应用程序将自动请求 userinfo 端点以获取用户的个人资料getUser的函数AuthorizeService.js文件,追踪_user.profile以获得新的索赔。此外,角色声明也包含在访问令牌中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定 SPA 和 .NET Core 3 的角色 的相关文章

随机推荐

  • 将派生类传递给专用于基类的模板函数

    以下代码可以正常编译 但会产生链接器错误 class Base class Derived public Base template
  • 为什么在 grep ps 时将正则表达式中的单个字符括在方括号中会排除 grep 本身?

    如果我在我的 Linux 机器上执行以下 grep ps ef grep bash root 2286 1 0 Jun06 00 03 15 bin bash etc init d zxy100wd wmiller 6436 6429 0
  • 在 HTTPS 上使用重定向的 JSF 导航规则存在问题

    我在使用时遇到问题
  • x 轴值的分组[重复]

    这个问题在这里已经有答案了 我有以下图 使用 matplotlib 绘制 正如您在 x 轴中看到的 一年中的天数显示为 0 364 之间的数字 但我想将 x 轴分成 12 等份 输出必须显示月份名称 如 Jan Feb Mar Nov De
  • jquery 进度条 - 一次加载所有内容

    我想要一个 jQuery 进度条 它根据服务器端请求的状态进行更新 我的代码基于本教程但它使用文件上传器作为基础 与this问题 如果没有文件上传器 我无法让它正常工作 问题是进度条仅在 process php 完成后更新 它不是异步请求进
  • 什么是复制省略以及它如何优化复制和交换习惯用法?

    我正在读书复制和交换 我尝试阅读有关 Copy Elision 的一些链接 但无法正确理解它的含义 有人可以解释一下这个优化是什么 特别是以下文本的含义吗 这不仅仅是一个方便的问题 而且实际上是一种优化 如果参数绑定到左值 另一个非常量对象
  • 检测 MFC 中的模式对话框

    如何以编程方式检测我的 MFC 应用程序当前是否正在显示模式对话框或属性表 目前我正在使用以下内容 但我觉得该代码也会触发非模式对话框 bool HasModalDialog const CWnd pWnd const CWnd pChil
  • 在 IE11 中使用数据 URL 打开 pdf.js

    我正在尝试使用 pdf js 在 IE10 上的数据 URL 中显示文档 那是 像这样的东西 它在 Firefox 或 Chrome 中运行良好 但在 Internet Explorer 10 和 11 中 会显示界面 但保持空白 并且文档
  • 在单个列表中列出所有文件夹中的所有文件

    我正在寻找列出 root Android 设备中所有文件的解决方案 假设根目录中有三个文件夹 但我想在一个列表中显示所有这些文件夹中的所有文件 现在如果我使用 File f new File sdcard 然后它会列出来自的所有文件sdca
  • 如何在 tasm 中在屏幕上打印 SVGA 信息?

    我是组装和图形的初学者 任何帮助将不胜感激 我得到了 svga 信息 但是当我打印它时 它不会打印任何内容 如果有人能解释为什么那就太好了 这是代码 如果我所做的事情需要更多解释 请告诉我 MODEL SMALL STACK 64 DATA
  • 如何将传单路由机包含到 Angular 2 TypeScript Webpack 应用程序中

    我使用这个种子开始使用 Angular 2 Typescript 和 Webpack https github com haoliangyu angular2 leaflet starter 我对大多数使用的工具和技术 Angular 2
  • 三星智能电视覆盖(新闻行情)应用程序

    有什么方法可以让应用程序作为 DVB 节目 即直播 上的覆盖 股票代码 运行 据我们所知 目前将应用程序显示为屏幕部分覆盖的唯一有效解决方案是从 TV SmartHub 菜单启动应用程序并通过 IP 通常是 HLS 流显示覆盖 例如 请参见
  • 在程序运行时更改程序

    不确定这是 emacs SLIME 问题还是 CL 问题或 SBCL 问题 我听说 Lisp 的交互特性允许在程序运行时更改程序 不知道这意味着什么 我尝试了以下操作 将其放在一个单独的文件中 defparameter repl test
  • rdr 是一个“变量”,但像“方法”一样使用

    我正在尝试将此 VB NET 代码转换为 C Protected Sub BT KEM CARIAN Click ByVal sender As Object ByVal e As System EventArgs Handles BT K
  • 使用 ng-repeat 创建 AngularJS 表

    我从数据库得到以下响应 关于类数组 其中类嵌套在组中 最后嵌套在学生中 Response Id 1 Name Class 1 Location Building 1 Groups Id 1 Name GB1 Students Id 1 Na
  • 如何在 vagrant guest 中连接到基于名称的虚拟主机?

    在盒子里 我有两个虚拟主机
  • json 文件的 $http.get 总是返回 404

    我想向我的应用程序添加一个配置 JSON 文件 我已将其添加到我的项目中并尝试使用 http get 获取它 http get http localhost myProject content json success function d
  • 低音音频库开/关按钮

    在此示例中如何创建开 关音乐按钮 在 Inno Setup 安装期间播放声音 我想使用 image png 以下脚本创建一个按钮 您可以通过该按钮根据流的当前状态播放或暂停流 Setup AppName Bass Audio Project
  • 子状态机

    我有一个有 5 个州的 FSM 其中3个是通过子FSM UML模式 设计的 对于 VHDL 中的实现 恕我直言 有两种方法可以做到这一点 将它们总结为一个 这样我就有了一份包含子 FSM 的文档和一个包含一个大 FSM 的产品 与所有州建立
  • 确定 SPA 和 .NET Core 3 的角色

    我有一个使用 NET Core 3 1 的应用程序 还有一个使用由此生成的默认 React 应用程序的前端link 在 NET Core 应用程序中 我使用用户和角色设置了 Identity Server 当我使用 React 应用程序时