C# 通过Identity server的API远程更改密码

C# 通过Identity server的API远程更改密码,c#,.net,api,identityserver3,C#,.net,Api,Identityserver3,我刚刚收到一个使用Identity server进行身份验证的.Net API。我以前从未使用过Identity server。所以我找不到信息了。 这是我的身份验证代码 [HttpPost] public async Task<IHttpActionResult> Post([FromBody] Login loginInfo) { OperationResult<string> result = new OperationRes

我刚刚收到一个使用Identity server进行身份验证的.Net API。我以前从未使用过Identity server。所以我找不到信息了。 这是我的身份验证代码

[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(以及其他类似的提供商)的全部目的是将身份验证的责任委托给它,主要是使应用程序和API无法查看用户凭据。IS也很少有用户意识;它们只是一个抽象的概念。像ASP.NET Identity这样的东西更关注用户

使用资源所有者流与OAuth2的整个意图完全背道而驰,实际上不应该在所有情况下都使用它。如果你只是为了这个,那么把它加到等式中基本上是没有意义的。它并不能解决OAuth2设计用来解决的大多数问题,而且您也不会获得单一登录

在实践中,通常您会在提供密码更改功能的同一服务器上或旁边有网页,您会给用户一个链接或将他们重定向到这些网页。我怀疑大多数使用IS的人都希望管理用户,要么集成ASP.NET Identity之类的东西,要么添加自己的页面。关于前者的文章很多;这是一个起点。这不是很琐碎,但很可行


如果您拥有的是一个不太可能按照预期迁移到使用OAuth2的遗留应用程序,那么最终您的代码只需要更改存储的密码或散列,无论用户存储在何处;e、 某个地方的数据库表。不过,这并没有帮助;您需要为此编写自己的代码。

资源所有者密码凭据流几乎不应该被使用;这是应用程序使用该Identity Server实例对用户进行身份验证的唯一方法吗?是的,代码现在就是这样。我所需要做的就是添加另一种更改密码的方法。谢谢!!我现在已经了解了全部情况。