使用ASP.NET身份2进行身份验证时,如何返回用户对象



此身份验证通常仅涉及使用用户凭证调用'/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中签名。

相关内容

  • 没有找到相关文章

最新更新