【问题标题】:how to give option to a user to update its own info in Identity Server如何为用户提供选项以在 Identity Server 中更新其自己的信息
【发布时间】:2021-03-18 14:23:45
【问题描述】:

我将身份用户派生为

    public class MyAppUser : IdentityUser
    {
        public MyAppUser () : base() { }
        public MyAppUser (string userName) : base(userName) { }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string CurrentAddress { get; set; }
    }

我还在声明中添加了所有这些属性值,以便我们可以将这些值发送给用户以查看详细信息。

await UsersRepository.AddClaimAsync(appuser, new Claim("firstName", "MyName"));
await UsersRepository.AddClaimAsync(appuser, new Claim("lastName", "MyLastName"));
await UsersRepository.AddClaimAsync(appuser, new Claim("currentAddress", "MyAddress"));

这里有两个问题

问题 1:- 值在两处重复。

  • 与 MyAppUser
  • 与声明

问题:-这是正确的方法吗?如果没有,最好的实现方法是什么?

问题 2:- 我想为用户提供一个选项来更新其自己的信息,例如 CurrentAddress 或 FirstName 或 姓氏。

问题:-

解决上述问题的一种方法是向所有用户授予 admin api 端点访问权限。但这是正确的方法吗?在 IdentityServer 中实现这一点的最佳方法是什么。

【问题讨论】:

    标签: c# api oauth-2.0 identityserver4 openid-connect


    【解决方案1】:

    由于您使用的是 IdentityServer4,我将通过定义身份资源来创建“配置文件”范围。 https://identityserver4.readthedocs.io/en/latest/topics/resources.html#identity-resources

    public static IEnumerable<IdentityResource> GetIdentityResources()
    {
        return new List<IdentityResource>
        {
            new IdentityResource(
                name: "profile",
                userClaims: new[] { "name", "email", "website" },
                displayName: "Your profile data")
        };
    }
    

    从那里,您可以查看实现 IProfileService 接口,以便访问管理用户个人资料信息的单独数据库或 API。

    档案服务文件:https://identityserver4.readthedocs.io/en/latest/reference/profileservice.html#refprofileservice

    您可以设置单独的用户配置文件或用户信息服务,您的用户可以在其中更新他们的信息,而不能更新信息。这样,他们就不会在实际身份验证服务的范围内直接修改数据。您可以从身份验证令牌中删除不必要的声明,并仅将它们作为“配置文件”范围的一部分提供。这将减少您提到的多余声明。这样做还为您提供了更多空间来添加您可能想要的任何用户个人资料信息(电话号码、电子邮件等)。

    【讨论】:

    • 用户配置文件或用户信息服务 -> 此服务将在身份服务管理 API 中?
    • @DJ 根据您的特定应用程序/用例,您可以通过多种方式实现它。您确实可以通过添加自己的控制器和端点来扩展身份服务器 API。我不知道你的整体架构是如何布局的,所以我不能推荐一个具体的方法。我想您有使用 ID4 保护的单独应用程序或 API?如果是这样,您可以在那里添加使其与主身份验证服务器分开的功能。取决于什么对您的用例最有意义。最简单的可能就是扩展身份服务器 API。
    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多