如何通过传递用户名和密码从身份服务器获取访问令牌?

Osa*_*han 5 .net api automation automated-tests identityserver3

我们正在使用身份服务器为我们的 Web 服务生成访问令牌。我们还添加了招摇。但是我们面临的问题是,通过使用 API 自动化的代码片段来生成访问令牌。是否有使用用户名和密码自动获取访问令牌的方法?

谢谢你。

Mat*_*att 2

我解决这个问题的方法是,如果配置了测试客户端密钥,则添加客户端凭据客户端,我仅在测试环境中配置此密钥,但显然不在更高的环境中,这意味着客户端永远不会添加到那里。

因此,无论是在您的 appsettings.{property_environment}.settings 中还是通过环境变量设置客户端密钥,然后在您的 IdentityServer 配置中您可以添加:

//attempt to get the test client secret
var testClientSecret = configuration["TestClientSecret"];
if (!String.IsNullOrWhiteSpace(testClientSecret))
{
    clients.Add(new Client
    {
        ClientId = "MyTestClient",

        AllowedGrantTypes = GrantTypes.ClientCredentials,

        ClientSecrets =
        {
            new Secret(testClientSecret.Sha256())
        },

        AllowedScopes = { "MyApiScope", "MyOtherApiScope", "etc." }
    });
};
Run Code Online (Sandbox Code Playgroud)

然后我有一个 Postman 测试集合,首先发布到:

https://{{idp_base_url}}/connect/token
Run Code Online (Sandbox Code Playgroud)

使用基本身份验证,将测试客户端名称的用户名和密码作为客户端密钥(其中 {{idp_base_url}} 是包含适合环境的 IdentityServer 主机的 postman 环境变量)。

然后我运行一些测试,同时还将访问令牌存储到 API:

//tests...
var tokenData = JSON.parse(responseBody);
//more tests...
postman.setEnvironmentVariable("cc_token", tokenData.access_token);
Run Code Online (Sandbox Code Playgroud)

然后,集合中的后续测试可以使用此令牌以及使用上面的 Postman 环境变量的不记名令牌身份验证标头来运行 API 测试:

邮递员不记名令牌