mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 18:32:51 +08:00

* Fixed Format Issue for Kubernetes ServiceDiscoveryProvider * Fixes broken links (#858) * Fix link to issue 262 * Fixes broken link to issue 340 * Fixed broken link to issue 340 (#857) * Update information for Okta Authorization (#853) * +dynamic claim variables (#855) incl. tests * IOcelotPipelineBuilder.Use(): Return IOcelotPipelineBuilder (#875) Fixes ThreeMammals/Ocelot#685 * Fix UpstreamHost checking when reroutes duplicate validation (#864) * Format json in reame (#877) Format json file in AdministrationApi ReadMe * kubernetes use in cluster (#882) * refactor :kubernetes use in cluster * feat:delete KubeClient * add more flexible method to config ocelot pipeline (#880) * update k8s doc & samples (#885) * refactor :kubernetes use in cluster * feat:delete KubeClient * feat : update k8s doc & samples * Update kubernetes.rst * Fix/issue666 (#889) * cache key now can generate from query string for request with Get Methods and request content for requests with post methods * MD5Helper Added. OutputCacheMiddleware now can generate cache key using method, url and content * unit test created for CacheKeyGenerator * CacheKeyGenerator Registered in OcelotBuilder as singletone * Fix issue #890 IDefinedAggregator can't handle error codes from downstream requests (#892) * Release/13.2.0 (#834) * Fix formatting in getting started page (#752) * updated release docs (#745) * Update README.md (#756) Fixed typo "Ocleot" * Fixed typo there => their (#763) * Some Typo fixes (#765) * Typo algorythm => algorithm (#764) * Typo querystring => query string (#766) * Typo usual => usually (#767) * Typos (#768) * kubernetes provider (#772) * feat: Kubernetes ServiceDiscoveryProvider * 编写k8s测试例子 * feat:fix kube config * feat: remove port * feat : complete the k8s test * feat : add kubeserviceDiscovery test * feat : add kube provider unittest * feat :add kubetnetes docs how to use ocelot with kubetnetes docs * keep the configuration as simple as possible, no qos, no cache * fix: use http * add PollingKubeServiceDiscovery * feat : refactor logger * feat : add pollkube docs * feat:Remove unnecessary code * feat : code-block json * fix issue #661 for Advanced aggregations (#704) * Add Advanced Aggregation Feature * fix overwrite error * distinct data for better performance * remove constructor parameter * fix tests issue * fix tests * fix tests issue * Add UnitTest and AcceptanceTest * fix responseKeys typo * Update SimpleJsonResponseAggregator.cs * change port * Fix code example for SSL Errors (#780) DangerousAcceptAnyServerCertificateValidator has to be set to "true" to disable certification validation, not "false". * Changed wording for ease of reading (#776) Just some wording changes for clarification. * Ignore response content if null (fix #785) (#786) * fix bug #791 (#795) * Update loadbalancer.rst (#796) * UriBuilder - remove leading question mark #747 (#794) * Update qualityofservice.rst (#801) Tiny typo * K8s package (#804) * feat: Kubernetes ServiceDiscoveryProvider * 编写k8s测试例子 * feat:fix kube config * feat: remove port * feat : complete the k8s test * feat : add kubeserviceDiscovery test * feat : add kube provider unittest * feat :add kubetnetes docs how to use ocelot with kubetnetes docs * keep the configuration as simple as possible, no qos, no cache * fix: use http * add PollingKubeServiceDiscovery * feat : refactor logger * feat : add pollkube docs * feat:Remove unnecessary code * feat : code-block json * feat: publish package Ocelot.Provider.Kubernetes * Okta integration (#807) Okta integration * update cliamsParser (#798) * update cliamsParser * update using * IOcelotBuilder opens the IMvcCoreBuilder property for easy customization (#790) * IOcelotBuilder opens the IMvcCoreBuilder property for easy customization * Adjustment code * nuget package (#809) * feat: Kubernetes ServiceDiscoveryProvider * 编写k8s测试例子 * feat:fix kube config * feat: remove port * feat : complete the k8s test * feat : add kubeserviceDiscovery test * feat : add kube provider unittest * feat :add kubetnetes docs how to use ocelot with kubetnetes docs * keep the configuration as simple as possible, no qos, no cache * fix: use http * add PollingKubeServiceDiscovery * feat : refactor logger * feat : add pollkube docs * feat:Remove unnecessary code * feat : code-block json * feat: publish package Ocelot.Provider.Kubernetes * feat : nuget package * fix: Namesapce Spelling wrong * fix:Namesapce Spelling Wrong * Fix: errors when using rate limiting (#811) * Fix: errors when using rate limiting Add: QuotaExceededError class for requesting too much Add: QuotaExceededError error code Add: Add an error when limit is reached Reflact: Extract GetResponseMessage method for getting default or configured response message for requ * Fix: modify check_we_have_considered_all_errors_in_these_tests for adding a new OcelotErrorCode * added missing COPY csproj files (#821) * Add note on In-Process hosting (#816) When using ASP.NET Core 2.2 with In-Process hosting in IIS it's important to use .UseIIS() instead of .UseIISIntegration(). * Fix bug: (#810) If the registered Consul node is unexpectedly down and not restarted immediately, other services should continue to find the registered service. * Fixed Dockerfile (missing Kubernetes) * Revert "Fix bug: (#810)" (#823) This reverts commit 19c80afb05290fac3a144f652cd663c8b513a559. * remove duplicate `IHttpRequester` register (#819) * remove duplicate `IHttpRequester` register * reserve the first * fix HttpRequesterMiddleware does not call next bug (#830) call next so that we can do something with the response, such as add some custom header etc... * Removed Packing to fix issues, will be sorted out after create a nuget package on Nuget.Org (#831) * Allows access to unpass node (#825) * Fix bug: If the registered Consul node is unexpectedly down and not restarted immediately, other services should continue to find the registered service. * fix bug: If the registered Consul node is unexpectedly down and not restarted immediately, other services should continue to find the registered service. * Updated FluentValidations Nuget Package (#833) * Removed Warnings * Make the full DownstreamContext available to user defined aggregators This allows error codes to be handled
183 lines
6.1 KiB
ReStructuredText
183 lines
6.1 KiB
ReStructuredText
Authentication
|
|
==============
|
|
|
|
In order to authenticate ReRoutes and subsequently use any of Ocelot's claims based features such as authorisation or modifying the request with values from the token. Users must register authentication services in their Startup.cs as usual but they provide a scheme (authentication provider key) with each registration e.g.
|
|
|
|
.. code-block:: csharp
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
{
|
|
var authenticationProviderKey = "TestKey";
|
|
|
|
services.AddAuthentication()
|
|
.AddJwtBearer(authenticationProviderKey, x =>
|
|
{
|
|
});
|
|
}
|
|
|
|
|
|
In this example TestKey is the scheme that this provider has been registered with.
|
|
We then map this to a ReRoute in the configuration e.g.
|
|
|
|
.. code-block:: json
|
|
|
|
"ReRoutes": [{
|
|
"DownstreamHostAndPorts": [
|
|
{
|
|
"Host": "localhost",
|
|
"Port": 51876,
|
|
}
|
|
],
|
|
"DownstreamPathTemplate": "/",
|
|
"UpstreamPathTemplate": "/",
|
|
"UpstreamHttpMethod": ["Post"],
|
|
"ReRouteIsCaseSensitive": false,
|
|
"DownstreamScheme": "http",
|
|
"AuthenticationOptions": {
|
|
"AuthenticationProviderKey": "TestKey",
|
|
"AllowedScopes": []
|
|
}
|
|
}]
|
|
|
|
When Ocelot runs it will look at this ReRoutes AuthenticationOptions.AuthenticationProviderKey
|
|
and check that there is an Authentication provider registered with the given key. If there isn't then Ocelot
|
|
will not start up, if there is then the ReRoute will use that provider when it executes.
|
|
|
|
If a ReRoute is authenticated Ocelot will invoke whatever scheme is associated with it while executing the authentication middleware. If the request fails authentication Ocelot returns a http status code 401.
|
|
|
|
JWT Tokens
|
|
^^^^^^^^^^
|
|
|
|
If you want to authenticate using JWT tokens maybe from a provider like Auth0 you can register your authentication middleware as normal e.g.
|
|
|
|
.. code-block:: csharp
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
{
|
|
var authenticationProviderKey = "TestKey";
|
|
|
|
services.AddAuthentication()
|
|
.AddJwtBearer(authenticationProviderKey, x =>
|
|
{
|
|
x.Authority = "test";
|
|
x.Audience = "test";
|
|
});
|
|
|
|
services.AddOcelot();
|
|
}
|
|
|
|
Then map the authentication provider key to a ReRoute in your configuration e.g.
|
|
|
|
.. code-block:: json
|
|
|
|
"ReRoutes": [{
|
|
"DownstreamHostAndPorts": [
|
|
{
|
|
"Host": "localhost",
|
|
"Port": 51876,
|
|
}
|
|
],
|
|
"DownstreamPathTemplate": "/",
|
|
"UpstreamPathTemplate": "/",
|
|
"UpstreamHttpMethod": ["Post"],
|
|
"ReRouteIsCaseSensitive": false,
|
|
"DownstreamScheme": "http",
|
|
"AuthenticationOptions": {
|
|
"AuthenticationProviderKey": "TestKey",
|
|
"AllowedScopes": []
|
|
}
|
|
}]
|
|
|
|
|
|
|
|
Identity Server Bearer Tokens
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
In order to use IdentityServer bearer tokens register your IdentityServer services as usual in ConfigureServices with a scheme (key). If you don't understand how to do this please consult the IdentityServer documentation.
|
|
|
|
.. code-block:: csharp
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
{
|
|
var authenticationProviderKey = "TestKey";
|
|
Action<IdentityServerAuthenticationOptions> options = o =>
|
|
{
|
|
o.Authority = "https://whereyouridentityserverlives.com";
|
|
o.ApiName = "api";
|
|
o.SupportedTokens = SupportedTokens.Both;
|
|
o.ApiSecret = "secret";
|
|
};
|
|
|
|
services.AddAuthentication()
|
|
.AddIdentityServerAuthentication(authenticationProviderKey, options);
|
|
|
|
services.AddOcelot();
|
|
}
|
|
|
|
Then map the authentication provider key to a ReRoute in your configuration e.g.
|
|
|
|
.. code-block:: json
|
|
|
|
"ReRoutes": [{
|
|
"DownstreamHostAndPorts": [
|
|
{
|
|
"Host": "localhost",
|
|
"Port": 51876,
|
|
}
|
|
],
|
|
"DownstreamPathTemplate": "/",
|
|
"UpstreamPathTemplate": "/",
|
|
"UpstreamHttpMethod": ["Post"],
|
|
"ReRouteIsCaseSensitive": false,
|
|
"DownstreamScheme": "http",
|
|
"AuthenticationOptions": {
|
|
"AuthenticationProviderKey": "TestKey",
|
|
"AllowedScopes": []
|
|
}
|
|
}]
|
|
|
|
Okta
|
|
^^^^
|
|
Add the following to your startup Configure method:
|
|
|
|
.. code-block:: csharp
|
|
|
|
app
|
|
.UseAuthentication()
|
|
.UseOcelot()
|
|
.Wait();
|
|
|
|
|
|
Add the following, at minimum, to your startup ConfigureServices method:
|
|
|
|
.. code-block:: csharp
|
|
|
|
services
|
|
.AddAuthentication()
|
|
.AddJwtBearer(oktaProviderKey, options =>
|
|
{
|
|
options.Audience = configuration["Authentication:Okta:Audience"]; // Okta Authorization server Audience
|
|
options.Authority = configuration["Authentication:Okta:Server"]; // Okta Authorization Issuer URI URL e.g. https://{subdomain}.okta.com/oauth2/{authidentifier}
|
|
});
|
|
services.AddOcelot(configuration);
|
|
|
|
|
|
NOTE: In order to get Ocelot to view the scope claim from Okta properly, you have to add the following to map the default Okta "scp" claim to "scope"
|
|
|
|
|
|
.. code-block:: csharp
|
|
|
|
// Map Okta scp to scope claims instead of http://schemas.microsoft.com/identity/claims/scope to allow ocelot to read/verify them
|
|
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("scp");
|
|
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("scp", "scope");
|
|
|
|
|
|
`Issue 446 <https://github.com/ThreeMammals/Ocelot/issues/446>`_ that contains some code and examples that might help with Okta integration.
|
|
|
|
Allowed Scopes
|
|
^^^^^^^^^^^^^
|
|
|
|
If you add scopes to AllowedScopes Ocelot will get all the user claims (from the token) of the type scope and make sure that the user has all of the scopes in the list.
|
|
|
|
This is a way to restrict access to a ReRoute on a per scope basis.
|