自定义 ASP.NET 身份

2024-03-20

我正在使用 Identity Server 4,并且已自定义 ASP.NET Identity 用户,如下所示:

public class ApplicationUser : IdentityUser
{
    [MaxLength(100)]
    public virtual string FirstName { get; set; }

    [MaxLength(100)]
    public virtual string LastName { get; set; }
}

我看不到在哪里配置 Identity Server 4 以将这两个属性包含在声明集合中。我查看了一些 Identity Server 4 示例,但没有看到任何示例。

理想情况下,我希望将这两个用户属性映射到given_name and family_name claims.

我目前正在连接通知并查询userinfo端点(混合流?)。所以我不确定这是否是 Identity Server 的配置或自定义userinfo终点?


为了包含您的自定义声明,您需要实施您自己的GetProfileDataAsync()方法使用IProfileService。每次请求用户声明时都会调用此方法。

这是我的 IProfileService 实现。

public class CustomProfileService : IProfileService
{
    private readonly UserManager<User> _userManager;

    public CustomProfileService(UserManager<User> userManager)
    {
        _userManager = userManager;
    }

    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        var subjectId = context.Subject.GetSubjectId();
        var user = await _userManager.FindByIdAsync(subjectId);

        if (user == null) return;

        var claims = new List<Claim>
        {
            new Claim("username", user.UserName),
            new Claim("email", user.Email),
            new Claim("firstname", user.FirstName),
            new Claim("lastname", user.LastName)
        };

        var roles = await _userManager.GetRolesAsync(user);
        foreach (var role in roles)
        {
            claims.Add(new Claim("role", role));
        }

        var userClaims = await _userManager.GetClaimsAsync(user);
        foreach (var userClaim in userClaims)
        {
            claims.Add(new Claim(userClaim.Type, userClaim.Value));
        }

        context.IssuedClaims = claims;
    }

    public async Task IsActiveAsync(IsActiveContext context)
    {
        var user = await _userManager.FindByIdAsync(context.Subject.GetSubjectId());
        context.IsActive = user.IsActive;
    }
}

然后你必须将以下行添加到Startup.ConfigureServices()

services.AddScoped<IProfileService, CustomProfileService>();

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

自定义 ASP.NET 身份 的相关文章

随机推荐

  • 如何使用R检查数据一致性(确保大小写和值不矛盾)?

    假设我有 Person Movie Rating Sally Titanic 4 Bill Titanic 4 Rob Titanic 4 Sue Cars 8 Alex Cars 9 Bob Cars 8 正如你所看到的 亚历克斯有一个矛
  • 我如何创建自己的 HTML 标签?

    我如何在 HTML 或 HTML5 中创建自己的 html 标签 以便我可以制作自己的 html 标签和 css 库 例如
  • 即使明确提供了模块路径,Eclipse 也找不到模块

    我创建了一个模块com company ep位于源文件夹中com company ep 是的 我已经删除了src从构建路径中删除它 在源文件夹中 我有几个包 如下所示 com company ep lt root source folder
  • python 中“除了 Exception as e”是什么意思? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 异常处理的典型结构如下 try pass except Exception e raise else pass finally pas
  • pip 安装失败,并显示:OSError: [Errno 13] 目录权限被拒绝

    pip install r requirements txt失败 但有以下异常OSError Errno 13 Permission denied usr local lib 出了什么问题以及如何解决这个问题 我正在尝试设置Django h
  • 不是函子(或不可遍历)的可折叠示例?

    A Foldable http hackage haskell org packages archive base latest doc html Data Foldable html实例可能是某种容器 因此也可能是Functor以及 的确
  • Python“任务服务器”

    我的问题是 我应该使用哪个 python 框架来构建我的服务器 Notes 该服务器与其客户端进行 HTTP 对话 GET 和 POST 通过 pyAMF 客户端 提交 任务 进行处理 然后在一段时间后检索关联的 task result 提
  • 从封闭的模板类推导返回类型时,函数解析失败

    我一直在尝试为定点类型实现一个复数类 其中乘法运算的结果类型将是输入类型的函数 我需要有一些函数 可以将复数乘以复数 也可以将复数乘以实数 这本质上是代码的简化版本 其中 A 是我的复杂类型 template
  • Java:检测对于 JSON 不正确的控制字符

    我正在重新发明轮子并用 Java 创建我自己的 JSON 解析方法 我正在查看 非常好 文档json org http www json org 我唯一不确定的部分是它说的地方 或控制字符 由于文档非常清晰 并且 JSON 非常简单且易于实
  • Angular 模块与库

    太棒了 Angular 已经发布了版本 6 并且 CLI 提供了生成库的选项 他们称之为 备受期待的功能 现在 从商业角度来看 我想知道 为什么你实际上需要这个 为什么在现有项目中而不是可以像往常一样通过 npm 安装的单独项目 如果您希望
  • 如何通过设置类来格式化 jsTree 中的“li”和“a”DOM 元素?

    基本上 我有一个 jsTree 我需要格式化它li and a通过向每种类型添加自定义类来实现 DOM 元素 文档不清楚如何执行此操作 据我所知 无法添加自定义类 任何格式都必须通过覆盖 jquery 主题或编辑 jsTree 源代码来实现
  • 只能在草稿应用程序上创建状态为草稿的版本

    我正在使用 Jenkins AndroidAPKUpload 插件 我在 Play 商店中有一个应用程序的草稿版本 该应用程序仅用于内部测试 永远不会向公众发布 我认为这意味着它将永远是一个草案 当我尝试通过插件上传 APK 时 我收到错误
  • hibernate使用注释或使用hibernate配置文件

    我看过很多使用注释 基本上是hibernate注释或JPA注释 来实现hibernate的教程 有教程主要关注使用hibernate配置文件 hbm xml文件 根本没有使用注释 现在我有点困惑 哪种方法更好 我绝对更喜欢使用注释来定义我的
  • sinon 存根 withArgs 可以匹配部分参数但不是全部参数

    我有一个正在存根的函数 该函数会使用多个参数进行调用 我想检查一下只是第一个参数 其余的都是回调函数 所以我不想管它们 因此 我可能有以下 2 个调用 以 ajax 为例 method get sinon stub method get 2
  • Groovy HTTPBuilder:从 GZIPed 分块响应中获取实体内容

    我需要向 Web 服务器发送 POST 请求 并能够读取该服务器发送的响应 我尝试使用 HTTPBuilder lib 和以下代码 def http new HTTPBuilder http myServer http setProxy P
  • 更改 Laravel 5.2 中的登录/注册 URL

    我目前正在编写一个应用程序 该应用程序仅包含公司员工的帐户 而不包含常规网站访问者的帐户 因此 我想将与网站 管理 区域相关的 URL 保留在 admin URL 下 这意味着更改 login to admin login and regi
  • 获取一个 url 参数的数组

    我想获取 url param id 但它不起作用 这里每个人都可以帮助我吗 下面的代码不起作用 Url http localhost 9000 rest alerts ids 123 ids 456 路由配置文件 GET restws al
  • Excel-VBA:需要变量声明吗?

    如果写下面的代码会不会出错 Sub Something Dim i As integer Dim xRange As Range Dim yRange As Range Set xRange Range x table Set yRange
  • 控制 R 散点图中点的大小?

    在 R 中 plot 函数需要一个pch控制图中点的外观的参数 我正在制作具有数万个点的散点图 并且更喜欢一个小但不是太小的点 基本上 我发现pch 太小了 但是pch 19太胖了 中间有什么东西或者有什么方法可以以某种方式缩小这些点吗 A
  • 自定义 ASP.NET 身份

    我正在使用 Identity Server 4 并且已自定义 ASP NET Identity 用户 如下所示 public class ApplicationUser IdentityUser MaxLength 100 public v