mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-20 01:02:50 +08:00
fix warnings
This commit is contained in:
parent
7f49bf5fe3
commit
c1776fb59f
@ -1,119 +1,119 @@
|
|||||||
namespace Ocelot.AcceptanceTests
|
namespace Ocelot.AcceptanceTests
|
||||||
{
|
{
|
||||||
using IdentityServer4.AccessTokenValidation;
|
using IdentityServer4.AccessTokenValidation;
|
||||||
using IdentityServer4.Models;
|
using IdentityServer4.Models;
|
||||||
using IdentityServer4.Test;
|
using IdentityServer4.Test;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Ocelot.Configuration.File;
|
using Ocelot.Configuration.File;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using TestStack.BDDfy;
|
using TestStack.BDDfy;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
public class AuthenticationTests : IDisposable
|
public class AuthenticationTests : IDisposable
|
||||||
{
|
{
|
||||||
private readonly Steps _steps;
|
private readonly Steps _steps;
|
||||||
private IWebHost _identityServerBuilder;
|
private IWebHost _identityServerBuilder;
|
||||||
private string _identityServerRootUrl;
|
private string _identityServerRootUrl;
|
||||||
private string _downstreamServicePath = "/";
|
private string _downstreamServicePath = "/";
|
||||||
private string _downstreamServiceHost = "localhost";
|
private string _downstreamServiceHost = "localhost";
|
||||||
private string _downstreamServiceScheme = "http";
|
private string _downstreamServiceScheme = "http";
|
||||||
private string _downstreamServiceUrl = "http://localhost:";
|
private string _downstreamServiceUrl = "http://localhost:";
|
||||||
private readonly Action<IdentityServerAuthenticationOptions> _options;
|
private readonly Action<IdentityServerAuthenticationOptions> _options;
|
||||||
private readonly ServiceHandler _serviceHandler;
|
private readonly ServiceHandler _serviceHandler;
|
||||||
|
|
||||||
public AuthenticationTests()
|
public AuthenticationTests()
|
||||||
{
|
{
|
||||||
_serviceHandler = new ServiceHandler();
|
_serviceHandler = new ServiceHandler();
|
||||||
_steps = new Steps();
|
_steps = new Steps();
|
||||||
var identityServerPort = RandomPortFinder.GetRandomPort();
|
var identityServerPort = RandomPortFinder.GetRandomPort();
|
||||||
_identityServerRootUrl = $"http://localhost:{identityServerPort}";
|
_identityServerRootUrl = $"http://localhost:{identityServerPort}";
|
||||||
_options = o =>
|
_options = o =>
|
||||||
{
|
{
|
||||||
o.Authority = _identityServerRootUrl;
|
o.Authority = _identityServerRootUrl;
|
||||||
o.ApiName = "api";
|
o.ApiName = "api";
|
||||||
o.RequireHttpsMetadata = false;
|
o.RequireHttpsMetadata = false;
|
||||||
o.SupportedTokens = SupportedTokens.Both;
|
o.SupportedTokens = SupportedTokens.Both;
|
||||||
o.ApiSecret = "secret";
|
o.ApiSecret = "secret";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_401_using_identity_server_access_token()
|
public void should_return_401_using_identity_server_access_token()
|
||||||
{
|
{
|
||||||
int port = RandomPortFinder.GetRandomPort();
|
int port = RandomPortFinder.GetRandomPort();
|
||||||
|
|
||||||
var configuration = new FileConfiguration
|
var configuration = new FileConfiguration
|
||||||
{
|
{
|
||||||
Routes = new List<FileRoute>
|
Routes = new List<FileRoute>
|
||||||
{
|
{
|
||||||
new FileRoute
|
new FileRoute
|
||||||
{
|
{
|
||||||
DownstreamPathTemplate = _downstreamServicePath,
|
DownstreamPathTemplate = _downstreamServicePath,
|
||||||
DownstreamHostAndPorts = new List<FileHostAndPort>
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
{
|
{
|
||||||
new FileHostAndPort
|
new FileHostAndPort
|
||||||
{
|
{
|
||||||
Host =_downstreamServiceHost,
|
Host =_downstreamServiceHost,
|
||||||
Port = port,
|
Port = port,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
DownstreamScheme = _downstreamServiceScheme,
|
DownstreamScheme = _downstreamServiceScheme,
|
||||||
UpstreamPathTemplate = "/",
|
UpstreamPathTemplate = "/",
|
||||||
UpstreamHttpMethod = new List<string> { "Post" },
|
UpstreamHttpMethod = new List<string> { "Post" },
|
||||||
AuthenticationOptions = new FileAuthenticationOptions
|
AuthenticationOptions = new FileAuthenticationOptions
|
||||||
{
|
{
|
||||||
AuthenticationProviderKey = "Test"
|
AuthenticationProviderKey = "Test",
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
||||||
.And(x => x.GivenThereIsAServiceRunningOn($"{_downstreamServiceUrl}{port}", 201, string.Empty))
|
.And(x => x.GivenThereIsAServiceRunningOn($"{_downstreamServiceUrl}{port}", 201, string.Empty))
|
||||||
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
||||||
.And(x => _steps.GivenOcelotIsRunning(_options, "Test"))
|
.And(x => _steps.GivenOcelotIsRunning(_options, "Test"))
|
||||||
.And(x => _steps.GivenThePostHasContent("postContent"))
|
.And(x => _steps.GivenThePostHasContent("postContent"))
|
||||||
.When(x => _steps.WhenIPostUrlOnTheApiGateway("/"))
|
.When(x => _steps.WhenIPostUrlOnTheApiGateway("/"))
|
||||||
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Unauthorized))
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Unauthorized))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_response_200_using_identity_server()
|
public void should_return_response_200_using_identity_server()
|
||||||
{
|
{
|
||||||
int port = RandomPortFinder.GetRandomPort();
|
int port = RandomPortFinder.GetRandomPort();
|
||||||
|
|
||||||
var configuration = new FileConfiguration
|
var configuration = new FileConfiguration
|
||||||
{
|
{
|
||||||
Routes = new List<FileRoute>
|
Routes = new List<FileRoute>
|
||||||
{
|
{
|
||||||
new FileRoute
|
new FileRoute
|
||||||
{
|
{
|
||||||
DownstreamPathTemplate = _downstreamServicePath,
|
DownstreamPathTemplate = _downstreamServicePath,
|
||||||
DownstreamHostAndPorts = new List<FileHostAndPort>
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
{
|
{
|
||||||
new FileHostAndPort
|
new FileHostAndPort
|
||||||
{
|
{
|
||||||
Host =_downstreamServiceHost,
|
Host =_downstreamServiceHost,
|
||||||
Port = port,
|
Port = port,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
DownstreamScheme = _downstreamServiceScheme,
|
DownstreamScheme = _downstreamServiceScheme,
|
||||||
UpstreamPathTemplate = "/",
|
UpstreamPathTemplate = "/",
|
||||||
UpstreamHttpMethod = new List<string> { "Get" },
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
AuthenticationOptions = new FileAuthenticationOptions
|
AuthenticationOptions = new FileAuthenticationOptions
|
||||||
{
|
{
|
||||||
AuthenticationProviderKey = "Test"
|
AuthenticationProviderKey = "Test",
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
||||||
@ -125,38 +125,38 @@ namespace Ocelot.AcceptanceTests
|
|||||||
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/"))
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/"))
|
||||||
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
|
||||||
.And(x => _steps.ThenTheResponseBodyShouldBe("Hello from Laura"))
|
.And(x => _steps.ThenTheResponseBodyShouldBe("Hello from Laura"))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_response_401_using_identity_server_with_token_requested_for_other_api()
|
public void should_return_response_401_using_identity_server_with_token_requested_for_other_api()
|
||||||
{
|
{
|
||||||
int port = RandomPortFinder.GetRandomPort();
|
int port = RandomPortFinder.GetRandomPort();
|
||||||
|
|
||||||
var configuration = new FileConfiguration
|
var configuration = new FileConfiguration
|
||||||
{
|
{
|
||||||
Routes = new List<FileRoute>
|
Routes = new List<FileRoute>
|
||||||
{
|
{
|
||||||
new FileRoute
|
new FileRoute
|
||||||
{
|
{
|
||||||
DownstreamPathTemplate = _downstreamServicePath,
|
DownstreamPathTemplate = _downstreamServicePath,
|
||||||
DownstreamHostAndPorts = new List<FileHostAndPort>
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
{
|
{
|
||||||
new FileHostAndPort
|
new FileHostAndPort
|
||||||
{
|
{
|
||||||
Host =_downstreamServiceHost,
|
Host =_downstreamServiceHost,
|
||||||
Port = port,
|
Port = port,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
DownstreamScheme = _downstreamServiceScheme,
|
DownstreamScheme = _downstreamServiceScheme,
|
||||||
UpstreamPathTemplate = "/",
|
UpstreamPathTemplate = "/",
|
||||||
UpstreamHttpMethod = new List<string> { "Get" },
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
AuthenticationOptions = new FileAuthenticationOptions
|
AuthenticationOptions = new FileAuthenticationOptions
|
||||||
{
|
{
|
||||||
AuthenticationProviderKey = "Test"
|
AuthenticationProviderKey = "Test",
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
||||||
@ -167,38 +167,38 @@ namespace Ocelot.AcceptanceTests
|
|||||||
.And(x => _steps.GivenIHaveAddedATokenToMyRequest())
|
.And(x => _steps.GivenIHaveAddedATokenToMyRequest())
|
||||||
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/"))
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/"))
|
||||||
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Unauthorized))
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Unauthorized))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_201_using_identity_server_access_token()
|
public void should_return_201_using_identity_server_access_token()
|
||||||
{
|
{
|
||||||
int port = RandomPortFinder.GetRandomPort();
|
int port = RandomPortFinder.GetRandomPort();
|
||||||
|
|
||||||
var configuration = new FileConfiguration
|
var configuration = new FileConfiguration
|
||||||
{
|
{
|
||||||
Routes = new List<FileRoute>
|
Routes = new List<FileRoute>
|
||||||
{
|
{
|
||||||
new FileRoute
|
new FileRoute
|
||||||
{
|
{
|
||||||
DownstreamPathTemplate = _downstreamServicePath,
|
DownstreamPathTemplate = _downstreamServicePath,
|
||||||
DownstreamHostAndPorts = new List<FileHostAndPort>
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
{
|
{
|
||||||
new FileHostAndPort
|
new FileHostAndPort
|
||||||
{
|
{
|
||||||
Host =_downstreamServiceHost,
|
Host =_downstreamServiceHost,
|
||||||
Port = port,
|
Port = port,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
DownstreamScheme = _downstreamServiceScheme,
|
DownstreamScheme = _downstreamServiceScheme,
|
||||||
UpstreamPathTemplate = "/",
|
UpstreamPathTemplate = "/",
|
||||||
UpstreamHttpMethod = new List<string> { "Post" },
|
UpstreamHttpMethod = new List<string> { "Post" },
|
||||||
AuthenticationOptions = new FileAuthenticationOptions
|
AuthenticationOptions = new FileAuthenticationOptions
|
||||||
{
|
{
|
||||||
AuthenticationProviderKey = "Test"
|
AuthenticationProviderKey = "Test",
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Jwt))
|
||||||
@ -210,38 +210,38 @@ namespace Ocelot.AcceptanceTests
|
|||||||
.And(x => _steps.GivenThePostHasContent("postContent"))
|
.And(x => _steps.GivenThePostHasContent("postContent"))
|
||||||
.When(x => _steps.WhenIPostUrlOnTheApiGateway("/"))
|
.When(x => _steps.WhenIPostUrlOnTheApiGateway("/"))
|
||||||
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Created))
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Created))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_201_using_identity_server_reference_token()
|
public void should_return_201_using_identity_server_reference_token()
|
||||||
{
|
{
|
||||||
int port = RandomPortFinder.GetRandomPort();
|
int port = RandomPortFinder.GetRandomPort();
|
||||||
|
|
||||||
var configuration = new FileConfiguration
|
var configuration = new FileConfiguration
|
||||||
{
|
{
|
||||||
Routes = new List<FileRoute>
|
Routes = new List<FileRoute>
|
||||||
{
|
{
|
||||||
new FileRoute
|
new FileRoute
|
||||||
{
|
{
|
||||||
DownstreamPathTemplate = _downstreamServicePath,
|
DownstreamPathTemplate = _downstreamServicePath,
|
||||||
DownstreamHostAndPorts = new List<FileHostAndPort>
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
{
|
{
|
||||||
new FileHostAndPort
|
new FileHostAndPort
|
||||||
{
|
{
|
||||||
Host =_downstreamServiceHost,
|
Host =_downstreamServiceHost,
|
||||||
Port = port,
|
Port = port,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
DownstreamScheme = _downstreamServiceScheme,
|
DownstreamScheme = _downstreamServiceScheme,
|
||||||
UpstreamPathTemplate = "/",
|
UpstreamPathTemplate = "/",
|
||||||
UpstreamHttpMethod = new List<string> { "Post" },
|
UpstreamHttpMethod = new List<string> { "Post" },
|
||||||
AuthenticationOptions = new FileAuthenticationOptions
|
AuthenticationOptions = new FileAuthenticationOptions
|
||||||
{
|
{
|
||||||
AuthenticationProviderKey = "Test"
|
AuthenticationProviderKey = "Test"
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Reference))
|
this.Given(x => x.GivenThereIsAnIdentityServerOn(_identityServerRootUrl, "api", "api2", AccessTokenType.Reference))
|
||||||
@ -253,126 +253,126 @@ namespace Ocelot.AcceptanceTests
|
|||||||
.And(x => _steps.GivenThePostHasContent("postContent"))
|
.And(x => _steps.GivenThePostHasContent("postContent"))
|
||||||
.When(x => _steps.WhenIPostUrlOnTheApiGateway("/"))
|
.When(x => _steps.WhenIPostUrlOnTheApiGateway("/"))
|
||||||
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Created))
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Created))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenThereIsAServiceRunningOn(string url, int statusCode, string responseBody)
|
private void GivenThereIsAServiceRunningOn(string url, int statusCode, string responseBody)
|
||||||
{
|
{
|
||||||
_serviceHandler.GivenThereIsAServiceRunningOn(url, async context =>
|
_serviceHandler.GivenThereIsAServiceRunningOn(url, async context =>
|
||||||
{
|
{
|
||||||
context.Response.StatusCode = statusCode;
|
context.Response.StatusCode = statusCode;
|
||||||
await context.Response.WriteAsync(responseBody);
|
await context.Response.WriteAsync(responseBody);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenThereIsAnIdentityServerOn(string url, string apiName, string api2Name, AccessTokenType tokenType)
|
private void GivenThereIsAnIdentityServerOn(string url, string apiName, string api2Name, AccessTokenType tokenType)
|
||||||
{
|
{
|
||||||
_identityServerBuilder = new WebHostBuilder()
|
_identityServerBuilder = new WebHostBuilder()
|
||||||
.UseUrls(url)
|
.UseUrls(url)
|
||||||
.UseKestrel()
|
.UseKestrel()
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
.UseIISIntegration()
|
.UseIISIntegration()
|
||||||
.UseUrls(url)
|
.UseUrls(url)
|
||||||
.ConfigureServices(services =>
|
.ConfigureServices(services =>
|
||||||
{
|
{
|
||||||
services.AddLogging();
|
services.AddLogging();
|
||||||
services.AddIdentityServer()
|
services.AddIdentityServer()
|
||||||
.AddDeveloperSigningCredential()
|
.AddDeveloperSigningCredential()
|
||||||
.AddInMemoryApiResources(new List<ApiResource>
|
.AddInMemoryApiResources(new List<ApiResource>
|
||||||
{
|
{
|
||||||
new ApiResource
|
new ApiResource
|
||||||
{
|
{
|
||||||
Name = apiName,
|
Name = apiName,
|
||||||
Description = "My API",
|
Description = "My API",
|
||||||
Enabled = true,
|
Enabled = true,
|
||||||
DisplayName = "test",
|
DisplayName = "test",
|
||||||
Scopes = new List<Scope>()
|
Scopes = new List<Scope>()
|
||||||
{
|
{
|
||||||
new Scope("api"),
|
new Scope("api"),
|
||||||
new Scope("api.readOnly"),
|
new Scope("api.readOnly"),
|
||||||
new Scope("openid"),
|
new Scope("openid"),
|
||||||
new Scope("offline_access")
|
new Scope("offline_access"),
|
||||||
},
|
},
|
||||||
ApiSecrets = new List<Secret>()
|
ApiSecrets = new List<Secret>()
|
||||||
{
|
{
|
||||||
new Secret
|
new Secret
|
||||||
{
|
{
|
||||||
Value = "secret".Sha256()
|
Value = "secret".Sha256(),
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
UserClaims = new List<string>()
|
UserClaims = new List<string>()
|
||||||
{
|
{
|
||||||
"CustomerId", "LocationId"
|
"CustomerId", "LocationId",
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
new ApiResource
|
new ApiResource
|
||||||
{
|
{
|
||||||
Name = api2Name,
|
Name = api2Name,
|
||||||
Description = "My second API",
|
Description = "My second API",
|
||||||
Enabled = true,
|
Enabled = true,
|
||||||
DisplayName = "second test",
|
DisplayName = "second test",
|
||||||
Scopes = new List<Scope>()
|
Scopes = new List<Scope>()
|
||||||
{
|
{
|
||||||
new Scope("api2"),
|
new Scope("api2"),
|
||||||
new Scope("api2.readOnly"),
|
new Scope("api2.readOnly"),
|
||||||
},
|
},
|
||||||
ApiSecrets = new List<Secret>()
|
ApiSecrets = new List<Secret>()
|
||||||
{
|
{
|
||||||
new Secret
|
new Secret
|
||||||
{
|
{
|
||||||
Value = "secret".Sha256()
|
Value = "secret".Sha256(),
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
UserClaims = new List<string>()
|
UserClaims = new List<string>()
|
||||||
{
|
{
|
||||||
"CustomerId", "LocationId"
|
"CustomerId", "LocationId",
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.AddInMemoryClients(new List<Client>
|
.AddInMemoryClients(new List<Client>
|
||||||
{
|
{
|
||||||
new Client
|
new Client
|
||||||
{
|
{
|
||||||
ClientId = "client",
|
ClientId = "client",
|
||||||
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
|
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
|
||||||
ClientSecrets = new List<Secret> {new Secret("secret".Sha256())},
|
ClientSecrets = new List<Secret> {new Secret("secret".Sha256())},
|
||||||
AllowedScopes = new List<string> { apiName, api2Name, "api.readOnly", "openid", "offline_access" },
|
AllowedScopes = new List<string> { apiName, api2Name, "api.readOnly", "openid", "offline_access" },
|
||||||
AccessTokenType = tokenType,
|
AccessTokenType = tokenType,
|
||||||
Enabled = true,
|
Enabled = true,
|
||||||
RequireClientSecret = false
|
RequireClientSecret = false,
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
.AddTestUsers(new List<TestUser>
|
.AddTestUsers(new List<TestUser>
|
||||||
{
|
{
|
||||||
new TestUser
|
new TestUser
|
||||||
{
|
{
|
||||||
Username = "test",
|
Username = "test",
|
||||||
Password = "test",
|
Password = "test",
|
||||||
SubjectId = "registered|1231231",
|
SubjectId = "registered|1231231",
|
||||||
Claims = new List<Claim>
|
Claims = new List<Claim>
|
||||||
{
|
{
|
||||||
new Claim("CustomerId", "123"),
|
new Claim("CustomerId", "123"),
|
||||||
new Claim("LocationId", "321")
|
new Claim("LocationId", "321"),
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.Configure(app =>
|
.Configure(app =>
|
||||||
{
|
{
|
||||||
app.UseIdentityServer();
|
app.UseIdentityServer();
|
||||||
})
|
})
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
_identityServerBuilder.Start();
|
_identityServerBuilder.Start();
|
||||||
|
|
||||||
_steps.VerifyIdentiryServerStarted(url);
|
_steps.VerifyIdentiryServerStarted(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
_serviceHandler.Dispose();
|
_serviceHandler.Dispose();
|
||||||
_steps.Dispose();
|
_steps.Dispose();
|
||||||
_identityServerBuilder?.Dispose();
|
_identityServerBuilder?.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user