如何在 asp.net mvc 核心中为 Identity Server 4 编写集成测试

How to write Integration Test for Identity Server 4 in asp.net mvc core

我有一个网络 api 使用身份服务器 4。我不知道从哪里开始编写集成测试。我有一个登录控制器,它接收用于 ResourceOwnerPassword 授权类型的用户名和密码。下面是我的代码。

控制器。

[Route("Authentication/Login")]
public async Task<IActionResult> WebApiLogin(string username, string password)
{
    var accessToken = await UserAccessToken.GenerateToken(username, password);
    return new JsonResult(accessToken);
}

Class生成token

public async Task<string> GenerateToken(string username, string password)
{
    //discover endpoint for metadata
    var disco = await DiscoveryClient.GetAsync("http://localhost:5000");

    //request token
    var clientToken = new TokenClient(disco.TokenEndpoint, "client", "secret");
    //var tokenResponse = await clientToken.RequestClientCredentialsAsync("Payment");
    var tokenResponse = await clientToken.RequestResourceOwnerPasswordAsync(username, password, "IntegrapayAPI");

    if (tokenResponse.IsError)
    {
        //Error tokenResponse.Error
        return tokenResponse.Error;
    }
    return tokenResponse.Json.ToString();
}

IdentityServer 项目启动class。

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentityServer()
        .AddTemporarySigningCredential()
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients());
    //.AddTestUsers(Config.GetUsers());

    services.AddTransient<IResourceOwnerPasswordValidator, ResourceOwnerPasswordValidator>();

    // Add framework services.
    //services.AddMvc();
}

你可以看看这个答案: 免责声明:我自己的问题,我的答案。 它包含 link 到 GitHub 存储库,其中针对 API 设置了集成测试,但它当然也适用于 MVC。实质是使用 in-memory IdentityServer 作为您的令牌生成器和验证器。

除此之外,您不应将 API 与 IdentityServer 混用。使用 IdentityServer 生成您的令牌,然后您的 API 将再次通过身份服务器验证这些令牌。

有很多好的 samples 可以帮助您入门。