Authorization¶
Ocelot supports claims based authorization which is run post authentication. This means if you have a route you want to authorize, you can add the following to your route configuration:
"RouteClaimsRequirement": {
"UserType": "registered"
}
In this example, when the Authorization Middleware is called, Ocelot will check to see if the user has the claim type UserType and if the value of that claim is "registered".
If it isn’t then the user will not be authorized and the response will be 403 Forbidden.
Authorization Middleware¶
The AuthorizationMiddleware is built-in into Ocelot pipeline.
Previous private:ClaimsToClaimsMiddlewarePrevious public:PreAuthorizationMiddlewareThis:AuthorizationMiddlewareNext private:ClaimsToHeadersMiddlewareNext public:PreQueryStringBuilderMiddleware
So, the closest middlewares are in order of calling:
ClaimsToClaimsMiddleware → PreAuthorizationMiddleware → AuthorizationMiddleware → ClaimsToHeadersMiddleware → PreQueryStringBuilderMiddleware
As you may know from the Middleware Injection chapter, the Authorization middleware can be overridden like this:
var app = builder.Build();
await app.UseOcelot(new OcelotPipelineConfiguration
{
AuthorizationMiddleware = async (context, next) =>
{
await next.Invoke();
}
});
await app.RunAsync();
Note! Do this in very rare cases, because overriding the Authorization middleware means you will lose claims and scopes authorizer through the RouteClaimsRequirement property of the route.
Another option is preparing before the actual authorization in PreAuthorizationMiddleware, which is public and open to overriding.
await app.UseOcelot(new OcelotPipelineConfiguration
{
PreAuthorizationMiddleware = async (context, next) =>
{
// Do whatever you want here
await next.Invoke(); // next is AuthorizationMiddleware
}
});