我刚刚收到一个使用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的全部意图完全相反,并且不应该在几乎所有情况下都使用。如果你只是为了这个目的而使用IS,那么将其添加到等式中基本上是毫无意义的。它不能解决OAuth2设计用来解决的大多数问题,而且你也没有单一登录
在实践中,通常你会在IS上(或在同一服务器上(有提供密码更改功能的网页,你会给用户一个链接或将他们重定向到这些网页。我怀疑大多数使用IS的人想要管理用户,要么集成ASP.NET Identity之类的东西,要么添加自己的页面。有许多关于前者的文章;这是一个起点。这并不完全是琐碎的,但很可行。
如果你的旧应用程序不太可能按预期迁移到使用OAuth2,那么最终你的代码只需要更改存储在用户所在位置的密码(或者希望是哈希(;例如某个地方的数据库表。IS对此没有帮助;你需要为此编写自己的代码。