gpt4 book ai didi

c# - WebAPI 使用用户名和密码对 Azure AD 进行非交互式身份验证

转载 作者:行者123 更新时间:2023-12-03 00:11:30 24 4
gpt4 key购买 nike

我在 Azure 上托管了一个 Rest 服务,并在其上启用了 Azure AD 身份验证。我正在 Microsoft Add in 中使用此 Web 服务。

我不想向用户提示 Microsoft 登录页面。相反,使用他的用户名和密码登录后台并获取访问 token 和刷新 token 。

我一直在使用以下代码:

 private static string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
AuthenticationResult result = null;
string user = "";
string password = "";
string resrouce = "web service URL";
authContext = new AuthenticationContext(authority, new FileCache());

UserCredential uc = new UserPasswordCredential(user, password);
result = authContext.AcquireTokenAsync(todoListResourceId, clientId, uc).Result;

此代码的异常(exception)情况是“请求正文必须包含以下参数:client_secret 或 client_assertion”。我没有找到使用用户凭据传递客户端 secret 或客户端断言的方法。

我也尝试过下面的代码。在下面的代码中,使用客户端 ID 和客户端 key 并获取将在一小时内过期的访问 token ,并且此代码不会返回刷新 token 。此访问 token 不是特定于用户的。

 string tenantName = "contoso.com";
string authString = "https://login.microsoftonline.com/" + tenantName;
AuthenticationContext authenticationContext = new AuthenticationContext(authString, false);
string clientId = "a3b4eef4-33f0-4e98-9d57-ad14549bf310";
string key = "Secret Key";
ClientCredential clientCred = new ClientCredential(clientId, key);
string resource = "Service URL ";
string token;
AuthenticationResult authenticationResult = authenticationContext.AcquireTokenAsync(resource, clientCred).Result;
token = authenticationResult.AccessToken;

有没有办法从 Azure AD 获取访问 token 和刷新 token 而不提示用户 Microsoft 登录表单。

最佳答案

您似乎在 azure 广告中注册了一个网络应用程序/API,它使用用户名和密码进行身份验证。我们只能使用来自 native 客户端的资源所有者流程。 secret 客户端(例如网站)无法使用直接用户凭据。

您需要将其作为公共(public)客户端( native 客户端应用程序)而不是 secret 客户端(Web 应用程序/API)来调用。请引用this document了解有关如何使用 ADAL .NET 通过用户名/密码对用户进行身份验证的更多信息。特别是约束和限制部分。

您还可以使用client credential flow在您的场景中,但通过此流程,应用程序将其客户端凭据提供给 OAuth2 token 发布端点,并作为返回获取代表应用程序本身的访问 token ,而无需任何用户信息。应用程序不需要获取刷新 token 。当访问 token 过期时,它只需返回 OAuth2 token 颁发端点即可获取新的 token 。

关于c# - WebAPI 使用用户名和密码对 Azure AD 进行非交互式身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591683/

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