gpt4 book ai didi

c# - 使用用户凭据获取 Web API 的 token

转载 作者:行者123 更新时间:2023-12-03 01:04:46 25 4
gpt4 key购买 nike

我已在测试 AAD 租户中创建了一个新用户帐户,例如 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="12667761666761776023527f6b66777c737c663c7d7c7f7b71607d617d74663c717d7f" rel="noreferrer noopener nofollow">[email protected]</a>并为其设置密码。此新帐户是可以访问特定 Web API 的安全组的成员。我正在尝试编写一个测试(控制台程序),该测试使用用户凭据和应用程序 ID 作为受众以非交互方式获取访问 token ,然后调用端点。

我该怎么做?

更新:

我正在尝试为我的 Web API 应用程序编写一组集成安全测试。应用程序使用它获取的 AAD 组作为一组声明,并将它们视为角色。因此,我想要一组具有不同角色的已知密码的测试用户帐户来测试不同安全上下文下端点的行为。该方法对我来说使用经典 AD 已经有用了很多年(我可以使用登录名/密码对来模拟用户,并对启用了 Windows Auth 的服务执行 SOAP 调用)。

更新2:

我可以使用一组应用程序注册而不是测试用户帐户,并使用 client_id/client_secret 对毫无问题地获取 token ,但将企业应用程序分配到安全组需要高级 AAD 层,即非常贵:(

最佳答案

这基本上就是资源所有者密码凭证 (ROPC) 授予流程的用途。您向 Azure AD 提供您的应用程序的凭据和用户的凭据,然后您将获得访问 token 。

此流程通常不应用于身份验证,因为它主要作为遗留升级路径存在于标准中。它不适用于联合用户、具有 MFA 或密码过期的用户。但是,您的自动化测试案例是我认为其使用是可以接受的场景之一。

以下是 C# 中的调用示例:

string tokenUrl = $"https://login.microsoftonline.com/joonasapps.onmicrosoft.com/oauth2/token";
var req = new HttpRequestMessage(HttpMethod.Post, tokenUrl);

req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "password",
["client_id"] = "23d3be1b-a671-4452-a928-78fb842cb969",
["client_secret"] = "REDACTED",
["resource"] = "https://graph.windows.net",
["username"] = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="81f5e4f2f5f4f2e4f3c1ebeeeeefe0f2e0f1f1f2afeeefece8e2f3eef2eee7f5afe2eeec" rel="noreferrer noopener nofollow">[email protected]</a>",
["password"] = "REDACTED"
});

using (var client = new HttpClient())
{
var res = await client.SendAsync(req);

string json = await res.Content.ReadAsStringAsync();
}

ADAL.NET 不会公开执行此操作的重载,因此您需要像这样手动执行此操作。当然,您需要将参数替换为应用程序的凭据+用户的凭据。 token URL 还需要您的租户 ID 或域名。将资源参数更改为您的 API 的客户端 ID/应用 ID URI。

关于c# - 使用用户凭据获取 Web API 的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204453/

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