Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net mvc core中编写Identity Server 4集成测试_C#_Asp.net Mvc_Asp.net Core_Identityserver4 - Fatal编程技术网

C# 如何在asp.net mvc core中编写Identity Server 4集成测试

C# 如何在asp.net mvc core中编写Identity Server 4集成测试,c#,asp.net-mvc,asp.net-core,identityserver4,C#,Asp.net Mvc,Asp.net Core,Identityserver4,我有一个使用Identity server 4的web api。我不知道从哪里开始写集成测试。我有一个登录控制器,接收用于ResourceOwnerPassword授权类型的用户名和密码。下面是我的代码 控制器 [Route("Authentication/Login")] public async Task<IActionResult> WebApiLogin(string username, string password) { var accessToken = awa

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

控制器

[Route("Authentication/Login")]
public async Task<IActionResult> WebApiLogin(string username, string password)
{
    var accessToken = await UserAccessToken.GenerateToken(username, password);
    return new JsonResult(accessToken);
}
[路由(“身份验证/登录”)]
公共异步任务WebApiLogin(字符串用户名、字符串密码)
{
var accessToken=await UserAccessToken.GenerateToken(用户名、密码);
返回新的JsonResult(accessToken);
}
类来生成令牌

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();
}
public async Task GenerateToken(字符串用户名、字符串密码)
{
//发现元数据的终结点
var disco=await DiscoveryClient.GetAsync(“http://localhost:5000");
//请求令牌
var clientToken=new TokenClient(disco.TokenEndpoint,“client”,“secret”);
//var tokenResponse=await clientToken.RequestClientCredentialsAsync(“付款”);
var tokenResponse=await clientToken.RequestResourceOwnerPasswordAsync(用户名、密码,“IntegratPayAPI”);
if(tokenResponse.IsError)
{
//错误响应。错误
返回tokenResponse.Error;
}
返回tokenResponse.Json.ToString();
}
IdentityServer项目启动类

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();
}
public void配置服务(IServiceCollection服务)
{
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients());
//.AddTestUsers(Config.GetUsers());
services.AddTransient();
//添加框架服务。
//services.AddMvc();
}

你可以看看这个答案: 免责声明:我自己的问题,我的答案。 它包含一个指向repo的链接,在repo中,集成测试是针对API设置的,但它当然也适用于MVC。其本质是使用内存中的IdentityServer作为令牌生成器和验证器

除此之外,您不应该将API与IdentityServer混合使用。使用IdentityServer生成您的令牌,然后API将在IdentityServer上验证这些令牌

有很多好东西可以让你开始