Simple and configurable JWT Bearer Authentication for Web APIs and OIDC+Cookie Authentication for Web Apps.
$ dotnet add package Keycloak.AuthServices.AuthenticationEasy Authentication and Authorization with Keycloak in .NET and ASP.NET Core.
Add OpenID Connect + JWT Bearer token authentication.
// add configuration from keycloak file
host.ConfigureKeycloakConfigurationSource("keycloak.json");
// add authentication services, OICD JwtBearerDefaults.AuthenticationScheme
services.AddKeycloakAuthentication(configuration, o =>
{
o.RequireHttpsMetadata = false;
});Client roles are automatically transformed into user role claims KeycloakRolesClaimsTransformation.
Keycloak installation file:
// confidential client
{
"realm": "<realm>",
"auth-server-url": "http://localhost:8088/auth/",
"ssl-required": "external", // external | none
"resource": "<clientId>",
"verify-token-audience": true,
"credentials": {
"secret": ""
}
}
// public client
{
"realm": "<realm>",
"auth-server-url": "http://localhost:8088/auth/",
"ssl-required": "external",
"resource": "<clientId>",
"public-client": true,
"confidential-port": 0
}services.AddAuthorization(authOptions =>
{
authOptions.AddPolicy("<policyName>", policyBuilder =>
{
// configure policies here
});
}).AddKeycloakAuthorization(configuration);Keycloak API clients.
| Service | Description |
|---|---|
| IKeycloakClient | Unified HTTP client - IKeycloakRealmClient, IKeycloakProtectedResourceClient |
| IKeycloakRealmClient | Keycloak realm API |
| IKeycloakProtectedResourceClient | Protected resource API |
| IKeycloakProtectionClient | Authorization server API, used by AddKeycloakAuthorization |
// requires confidential client
services.AddKeycloakAdminHttpClient(keycloakOptions);
// based on token forwarding HttpClient middleware and IHttpContextAccessor
services.AddKeycloakProtectionHttpClient(keycloakOptions);dotnet cake --target build
dotnet pack -o ./Artefacts