added proper documentation for openid integration
This commit is contained in:
@@ -6,6 +6,8 @@ A simple backend management api for ASP.NET Core Web APIs
|
|||||||
- [x] User authentication
|
- [x] User authentication
|
||||||
- [x] Permission management
|
- [x] Permission management
|
||||||
- [x] Generated frontend administration boards
|
- [x] Generated frontend administration boards
|
||||||
|
- [x] API token support
|
||||||
|
- [x] OpenID authentication integration
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
There are two different versions of HopFrame, either the Web API version or the full Blazor web version.
|
There are two different versions of HopFrame, either the Web API version or the full Blazor web version.
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ by configuring your configuration to load these.
|
|||||||
> custom configurations / HopFrame services.
|
> custom configurations / HopFrame services.
|
||||||
|
|
||||||
You can specify `Seconds`, `Minutes`, `Hours` and `Days` for either of the two token types.
|
You can specify `Seconds`, `Minutes`, `Hours` and `Days` for either of the two token types.
|
||||||
These get combined to a single time span.
|
These get combined to a single time span. You can also completely disable the default authentication
|
||||||
|
by setting the `DefaultAuthentication` to `false`. Note that you will no longer be able to login in any
|
||||||
|
way unless you enabled the [OpenID](./openid.md) authentication.
|
||||||
|
|
||||||
#### Configuration example
|
#### Configuration example
|
||||||
```json
|
```json
|
||||||
|
|||||||
120
docs/openid.md
Normal file
120
docs/openid.md
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
# OpenID Authentication
|
||||||
|
The HopFrame allows you to use an OpenID provider as your authentication provider for single sign on or better security
|
||||||
|
etc. To use it, you just simply need to configure it through the `appsettings.json` or environment variables.
|
||||||
|
|
||||||
|
>**Note**: The Blazor module has not yet implemented endpoints for the login process, but the middleware is correctly
|
||||||
|
> configured and the `IOpenIdAccessor` service is also provided for you to easily implement the endpoints yourself.
|
||||||
|
|
||||||
|
When you have enabled the integration, new endpoints will also be provided to perform the authentication.
|
||||||
|
simply use the swagger explorer to look up how the endpoints function. They're all under the subroute
|
||||||
|
`/api/v1/openid/`.
|
||||||
|
|
||||||
|
## Configure the HopFrame to use OpenID authentication
|
||||||
|
|
||||||
|
1. Create / Configure your OpenID provider:
|
||||||
|
|
||||||
|
- Save the ClientID and Client Secret from the provider, because you need it later.
|
||||||
|
- The default redirect uri looks something like this: `https://example.com/api/v1/openid/callback`.
|
||||||
|
- **Replace** the origin with the FQDN of your service.
|
||||||
|
- In order for the HopFrame to automatically renew expired access tokens you need to enable the `offline_access` scope.
|
||||||
|
- The integration also works without doing that, but then you need to reauthenticate every time your access token expires.
|
||||||
|
|
||||||
|
2. Configure the HopFrame integration:
|
||||||
|
|
||||||
|
>**Hint**: All of these configuration options can also be defined as environment variables. Use '__'
|
||||||
|
> to separate the namespaces like so: `HOPFRAME__AUTHENTICATION__OPENID__ENABLED=true`
|
||||||
|
|
||||||
|
- Add the following lines to your `appsettings.json`:
|
||||||
|
```json
|
||||||
|
"HopFrame": {
|
||||||
|
"Authentication": {
|
||||||
|
"OpenID": {
|
||||||
|
"Enabled": true,
|
||||||
|
"Issuer": "your-issuer",
|
||||||
|
"ClientId": "your-client-id",
|
||||||
|
"ClientSecret": "your-client-secret"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
>**Hint**: If you are using Authentik, the issuer url looks something like this: `https://auth.example.com/application/o/application-name/`.
|
||||||
|
> Just replace the FQDN and application-name with your configured application.
|
||||||
|
|
||||||
|
- **Optional**: You can also disable the default authentication via the config:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"HopFrame": {
|
||||||
|
"Authentication": {
|
||||||
|
"DefaultAuthentication": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Optional**: By default, the HopFrame will cache the api responses to reduce api latency. This can also be configured in the config (the cache can also be completely disabled here):
|
||||||
|
|
||||||
|
```json
|
||||||
|
"HopFrame": {
|
||||||
|
"Authentication": {
|
||||||
|
"OpenID": {
|
||||||
|
"Cache": {
|
||||||
|
"Enabled": true,
|
||||||
|
"Configuration": {
|
||||||
|
"Hours": 5
|
||||||
|
},
|
||||||
|
"Auth": {
|
||||||
|
"Seconds": 90
|
||||||
|
},
|
||||||
|
"Inspection": {
|
||||||
|
"Minutes": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Optional**: You can also define your own callback endpoint like so (you also need to add / replace the endpoint in the provider settings):
|
||||||
|
|
||||||
|
```json
|
||||||
|
"HopFrame": {
|
||||||
|
"Authentication": {
|
||||||
|
"OpenID": {
|
||||||
|
"Callback": "https://example.com/auth/callback"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Optional**: You can also prevent new users from being created by disabling it in the config:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"HopFrame": {
|
||||||
|
"Authentication": {
|
||||||
|
"OpenID": {
|
||||||
|
"GenerateUsers": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use the abstraction to integrate OpenID yourself
|
||||||
|
|
||||||
|
The HopFrame has a service, that simplifies the communication with the OpenID provider called `IOpenIdAccessor`.
|
||||||
|
You can inject it like every other service in your application.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public interface IOpenIdAccessor {
|
||||||
|
|
||||||
|
Task<OpenIdConfiguration> LoadConfiguration();
|
||||||
|
|
||||||
|
Task<OpenIdToken> RequestToken(string code, string defaultCallback);
|
||||||
|
|
||||||
|
Task<string> ConstructAuthUri(string defaultCallback, string state = null);
|
||||||
|
|
||||||
|
Task<OpenIdIntrospection> InspectToken(string token);
|
||||||
|
|
||||||
|
Task<OpenIdToken> RefreshAccessToken(string refreshToken);
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -9,6 +9,7 @@ The HopFrame comes in two variations, you can eiter only use the backend with so
|
|||||||
- [Base Models](./models.md)
|
- [Base Models](./models.md)
|
||||||
- [Authentication](./authentication.md)
|
- [Authentication](./authentication.md)
|
||||||
- [Permissions](./permissions.md)
|
- [Permissions](./permissions.md)
|
||||||
|
- [OpenID Integration](./openid.md)
|
||||||
|
|
||||||
## HopFrame Web API
|
## HopFrame Web API
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user