gpt4 book ai didi

asp.net - 如果 WebAPI 根据客户端凭据进行身份验证,则获取用户信息

转载 作者:行者123 更新时间:2023-12-02 23:49:12 25 4
gpt4 key购买 nike

在通过 Web 应用程序和 API 拥有 Azure AD 之前 -

用户在应用程序表单上输入 ID 和密码 -> 用户登录(Asp.net Identity) -> 使用相同的凭据,在 WebAPI 处获取生成的 token (grant_type=password)-> 将此 token 存储为 cookie 以供稍后使用上。

现在使用 Azure AD -

我有一个场景,我必须使用 Azure AD 对用户进行身份验证。 Azure 上的 webapi 传递包含登录用户信息的 JWT。从这些信息中,我提取用户电子邮件并强制我的 Web 应用程序登录用户(Asp.net Identity)。

Web 应用程序调用 WebAPI 来获取 token ,因为我无法传递密码,因此我的 token 调用更改为 (grant_type=client_credentials)。但是,我丢失了登录 Web API 的个人用户的信息。如果我检查 context.user 它指向唯一的客户端 ID 而不是任何用户。

我知道这很困惑,但要求是使用相同的应用程序进行 Azure AD 身份验证以及本地表单例份验证。请建议是否有更简单的方法来实现这一目标。

编辑:我正在使用 Owin oAuth

我使用相同的应用程序进行表单例份验证和 Azure AD。然而,最近不得不在 Web API 级别添加日志记录机制,该机制适用于使用用户 ID/密码进行日志记录的本地应用程序。但如果 webapi 使用客户端凭据颁发 token ,则它不起作用。我尝试在验证客户端 ID(在 ValidateClientAuthentication 中)并登录用户时将用户名作为参数传递。但是 webapi 无法保留此用户信息。

最佳答案

这是我为解决问题所做的工作 - 我没有为客户端分配claimsIdentity,而是生成了用户身份。 (_username 是本地变量,它从参数的“ValidateClientAuthentication”中获取分配的值。我知道这可能不是理想的方式,但现在我的应用程序现在可以使用 JWT token 在表单例份验证和 Azure AD 上运行)

 public override async Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

ApplicationUser user = await userManager.FindByNameAsync(_userName);

ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, CookieAuthenticationDefaults.AuthenticationType);

var ticket = new AuthenticationTicket(oAuthIdentity, null);

context.Validated(ticket);
}

关于asp.net - 如果 WebAPI 根据客户端凭据进行身份验证,则获取用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962077/

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