此身份验证通常仅涉及使用用户凭证调用'/doken'端点,并接收包含用户的auth令牌的票证。我正在从WPF客户端应用程序中在Web API中调用此功能,这将使我的生活更轻松,并且登录过程更快,如果我可以简单地拥有一个返回身份验证的IdentityUser
或在普通模板中的身份验证请求,或基于API项目,AspNetUser
对象。
我在API的ApplicationOAuthProvider
中看到了TokenEndPoint
的方法很少,所以我认为那里的更改没有太大帮助,但是GrantResourceOwnerCredentials
似乎是该提供商的关键,但其返回是无效的。
提供商的选项包括:
授权点=新路径串("/api/account/externallogin")
,但我找不到执行该行动的证据。我将所有成功的请求追踪到日志,并且我的Debug.WriteLine($"API TRACE: ExternalLogin called for {provider}.")
不会出现在输出窗口中,因此我认为我无法将该操作使用该操作将服务器重定向到返回用户的一个。
除了从允许匿名的登录操作调用/Token
端点,然后重定向?
编辑:授予令牌的方法在我的项目模板中提供的ApplicationOAuthProvider
类中。它源自OAuthAuthorizationServerProvider
。是:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<UserManager>();
var user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", $"The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
可以在ApplicationOAuthProvider : OAuthAuthorizationServerProvider
类的GrantResourceOwnerCredentials
方法中执行Server.Transfer
。这是在项目模板或Nuget软件包中提供的。
传输将是AccountController
中添加的Login
方法,并带有用户名,密码和附加的ticket
参数,该参数将返回AspNetUser
用户类,您可以在该类别中添加额外的属性,以在GrantResourceOwnerCredentials
中获得的身份验证票证通常由/Token
资源返回。
但这太干预了我不是我写的代码,所以对于这个项目的紧急原型,我只致电/Token
,当我拥有用户名时,我致电/User
以在AspNetUser
中签名。