gpt4 book ai didi

.net - OWIN的oAuth中ValidateClientAuthentication方法和GrantResourceOwnerCredentials方法有什么区别?

转载 作者:行者123 更新时间:2023-12-04 18:01:23 30 4
gpt4 key购买 nike

我是 .NET 中 oauth 和 owin 的初学者。我试图了解这些方法 ValidateClientAuthentication 方法和 GrantResourceOwnerCredentials 方法。我知道 GrantResourceOwnerCredentials 方法可用于验证凭据并生成 token 。那么,ValidateClientAuthentication() 方法的目的是什么。请指导我。非常感谢。

 public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
return Task.Factory.StartNew(() =>
{
var userName = context.UserName;
var password = context.Password;
var userService = new UserService(); // our created one
var user = userService.ValidateUser(userName, password);
if (user != null)
{
var claims = new List<Claim>()
{
new Claim(ClaimTypes.Sid, Convert.ToString(user.Id)),
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Email, user.Email)
};
ClaimsIdentity oAuthIdentity = new ClaimsIdentity(claims,Startup.OAuthOptions.AuthenticationType);


var properties = CreateProperties(user.Name);
var ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
}
else
{
context.SetError("invalid_grant", "The user name or password is incorrect");
}
});
}
#endregion

#region[ValidateClientAuthentication]
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
if (context.ClientId == null)
context.Validated();

return Task.FromResult<object>(null);
}
#endregion

最佳答案

这与Client Credentials Flow有关对比 Resource Owner Password Credentials Flow在 OAuth 2.0 规范中

请记住,客户端和资源所有者是 OAuth 下不同的实体。客户端代表资源所有者发出请求。

实际上,当您希望接受实际用户名和密码并发出访问 token 时,您可能希望使用 GrantResourceOwnerCredentials。

ValidateClientAuthentication 应该用于确保客户端是它所说的那样。如果已将客户端注册到授权服务器并需要验证它是否仍然有效,您可能会这样做。

我见过的大多数代码示例只是像您在示例中所做的那样调用 context.Validated()。我找到了一篇博客文章,其中包含更深入的代码示例。在这里查看:http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/

关于.net - OWIN的oAuth中ValidateClientAuthentication方法和GrantResourceOwnerCredentials方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47974364/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com