Настройка протокола OpenID Connect (OIDC) в Minio осуществляется путем настройки OIDC поставщика и настройки веб-приложения. Вот шаги, которые нужно выполнить:
1. Установите и настройте ory Hydra в соответствии с вашими потребностями. Можно найти подробную инструкцию по установке и настройке ory Hydra на официальном сайте https://www.ory.sh/hydra/docs/.
2. Создайте OIDC клиента в Hydra, который будет представлять ваше приложение на go. Следуйте инструкциям в документации Hydra для создания клиента.
3. В настройках Minio (файл `minio.conf` или переменные окружения) укажите параметры OIDC поставщика. Вам понадобятся следующие параметры:
- `MINIO_IDENTITY_OPENID_AUTH_ENDPOINT`: URL для аутентификации.
- `MINIO_IDENTITY_OPENID_TOKEN_ENDPOINT`: URL для получения токена.
- `MINIO_IDENTITY_OPENID_CLIENT_ID`: Идентификатор клиента вашего приложения.
- `MINIO_IDENTITY_OPENID_CLIENT_SECRET`: Секретный ключ клиента вашего приложения.
- `MINIO_IDENTITY_OPENID_ISSUER_URL`: URL издателя OIDC. Это может быть URL Hydra.
4. Приложение на go должно получать токен от Hydra и передавать его в Minio с использованием OIDC ваызовов. В зависимости от ваших потребностей, вам может потребоваться использовать библиотеку OIDC (например, go-oidc) для работы с токенами и проверки авторизации.
Чтобы изменить токен внутри авторизации Hydra и добавить группу пользователей, вы можете использовать внутренний плагин Hydra, называемый consent admins. Этот плагин позволяет настроить согласование для администраторов системы, и вы можете модифицировать токен внутри этого плагина, чтобы добавить дополнительную информацию о группе пользователей.
При создании правил согласования используйте доступные переменные контекста, такие как `consent_request.Context` и `consent_request.RequestedScopes`, чтобы получить информацию о текущей авторизации и настроить токен в соответствии с вашими требованиями.
Например:
```go
// Consent admin plugin rule handler
func myCustomPlugin(ctx context.Context, consentRequest *consent.Request, err error) (*consent.Request, error) {
if consentRequest != nil {
// Add custom claims to the token (e.g., group information)
var claims jwt.MapClaims
if token, ok := consentRequest.AccessTokenExtra["access_token"].(string); ok {
claims = jwt.MapClaims{}
_ = json.Unmarshal([]byte(token), &claims)
} else {
claims = map[string]interface{}{}
}
// Add custom group claim
claims["group"] = "my-group"
// Serialize the modified claims back to a token
updatedTokenBytes, _ := json.Marshal(claims)
updatedToken := string(updatedTokenBytes)
// Update the token in the consent response
consentRequest.AccessTokenExtra["access_token"] = updatedToken
}
return consentRequest, nil
}
// Register the custom plugin rule handler
consent.GetManager().HandleConsentPostPersistHook(myCustomPlugin)
```
Это пример кода на go, который добавляет дополнительную информацию о группе пользователей в токен, возвращаемый Hydra. Вы можете настроить это правило согласования в соответствии с вашими требованиями, чтобы добавить необходимую информацию о группе пользователей в токен.