【问题标题】:Change password remotely through API for Identity server通过 API for Identity 服务器远程更改密码
【发布时间】:2021-08-04 18:35:29
【问题描述】:

我刚刚收到一个使用身份服务器进行身份验证的 .Net API。我以前从未使用过身份服务器。所以我迷路了寻找信息。 这是我的身份验证代码。

[HttpPost]
public async Task<IHttpActionResult> Post([FromBody] Login loginInfo)
        {
            OperationResult<string> result = new OperationResult<string>();
            result = await GetAuth(loginInfo);

            return Ok(result);       
        }


 private async Task<TokenResponse> GetAuth(Login loginInfo)
            {
                var client = new TokenClient(Constants.IdSrvToken, Constants.ClientId, Constants.ClientSecret);
                
                return await client.RequestResourceOwnerPasswordAsync(loginInfo.Usuario, loginInfo.Password, Constants.Scope);
            }

这工作正常。但我需要创建一个新的 API 方法来接收当前密码和新密码并进行更改。 TokenClient 类没有任何我可以使用的有用方法,也找不到与密码更改的实现方式相关的信息。 我可以在哪里找到信息的任何建议? 提前致谢。

【问题讨论】:

  • 资源所有者密码凭证流几乎不应该被使用;这是应用使用该 Identity Server 实例对用户进行身份验证的唯一方式吗?
  • 是的,现在的代码就是这样。我需要做的就是添加另一种更改密码的方法。

标签: c# .net api identityserver3


【解决方案1】:

不会有一个。使用 Identity Server(以及其他类似的提供程序)的全部意义在于委派对其进行身份验证的责任,主要是为了让应用程序和 API 无法查看用户凭据。 IS对“用户”的认识也很少;它们只是一个抽象的概念。像 ASP.NET Identity 这样的东西更关注用户。

使用资源所有者流与 OAuth2 的整体意图完全背道而驰,并且不应在几乎所有情况下使用。如果您只是为此使用 IS,那么将其添加到等式中基本上是没有意义的。它不能解决 OAuth2 旨在解决的大多数问题,而且您也无法获得单点登录。

实际上,通常您会在 IS 上(或在同一服务器上)拥有提供密码更改功能的网页,并且您会给用户一个链接或将他们重定向到这些页面。我怀疑大多数使用 IS 来管理用户的人要么集成 ASP.NET Identity 之类的东西,要么添加他们自己的页面。关于前者的文章很多; here 是一个起点。这不是微不足道的,而是完全可行的。

如果您拥有的旧版应用程序不太可能按照预期迁移到使用 OAuth2,那么最终您的代码只需要更改存储的密码(或希望的哈希值),无论用户存储在何处;例如某处的数据库表。 IS 对此无济于事。您需要为此编写自己的代码。

【讨论】:

  • 谢谢!!我现在已经了解了全貌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 2015-05-31
  • 2012-01-04
  • 2017-06-17
相关资源
最近更新 更多