我将如何在 Gentics Mesh 中实施 Okta 身份验证?
How would I implement Okta Authentication in Gentics Mesh?
Gentics Mesh 内置了对 Keycloak 的支持,但我想改用 Okta。
最佳做法是什么?
是否需要修改Mesh源码?
或者我应该在中间件层处理身份验证?
或者我可以实施 AuthServicePlugin 来验证来自 Okta 的令牌吗?
https://github.com/gentics/mesh/blob/dev/plugin-api/src/main/java/com/gentics/mesh/plugin/auth/AuthServicePlugin.java
更新
我已尝试在 mesh.yml 配置中使用我的 Okta 服务器,但抛出了异常。
这是我的 Okta 服务的 OIDC url -
https://{yourOktaDomain}/oauth2/v1/authorize
不幸的是,OAuth2 实现似乎是特定于 Keycloak 的 -
com.gentics.mesh.core.rest.error.GenericRestException: 500 Internal Server Error oauth_config_error
at com.gentics.mesh.core.rest.error.Errors.error(Errors.java:124)
...
Caused by: java.lang.RuntimeException: Error while loading realm info. Got code {404}
at com.gentics.mesh.auth.MeshOAuth2ServiceImpl.fetchPublicRealmInfo(MeshOAuth2ServiceImpl.java:451)
它看起来像是在拼凑一个不适用于 Okta 的 url。
https://github.com/gentics/mesh/blob/f85dac8bf954248a6556323d792e6b849fb1d593/services/keycloak-auth/src/main/java/com/gentics/mesh/auth/MeshOAuth2ServiceImpl.java#L434
如果我没记错的话,可以更改实现 [MeshOAuth2ServiceImpl] 以支持任何 OIDC。
根据 Genetics Mesh 文档,OAuth2 is supported out of the box。我会使用 Okta 中的 OpenID Connect 功能来获取 JWT 并在 Genetics Mesh 中使用它。
有一个关于将 OIDC 与 KeyCloak 结合使用的配置示例,但您可以用您的 Okta 端点替换提供的 KeyCloak 端点。
security:
oauth2:
enabled: true
config:
realm: "master"
authServerUrl: "http://localhost:3000/auth" # Okta endpoint here
sslRequired: "external"
resource: "mesh"
credentials:
secret: "9b65c378-5b4c-4e25-b5a1-a53a381b5fb4" # application secret here
confidentialPort: 0
此外,根据文档,如果您需要角色映射,则必须 create an AuthServicePlugin
。
最近更新了身份验证机制。
Gentics Mesh 现在将充当资源服务器的角色。只要添加来自 OAuth 服务器的 public 密钥,它就可以接受任何 JWT。
插件 API 已更新以支持 oauth 用户和网格之间的自定义映射。例如,这允许您将多个 oauth2 用户映射到一个包含所需 roles/groups 的网格用户。您还可以创建一个 1:1 映射,其中每个 oauth2 用户都将添加到 Mesh。
OAuth 服务器的 public 密钥可以通过插件 API 加载或硬编码在 public-keys.json
文件中。
您可以在此处阅读有关此主题的更多信息:
https://getmesh.io/docs/authentication/#_oauth2_oidc
Gentics Mesh 内置了对 Keycloak 的支持,但我想改用 Okta。
最佳做法是什么?
是否需要修改Mesh源码?
或者我应该在中间件层处理身份验证?
或者我可以实施 AuthServicePlugin 来验证来自 Okta 的令牌吗?
https://github.com/gentics/mesh/blob/dev/plugin-api/src/main/java/com/gentics/mesh/plugin/auth/AuthServicePlugin.java
更新
我已尝试在 mesh.yml 配置中使用我的 Okta 服务器,但抛出了异常。
这是我的 Okta 服务的 OIDC url -
https://{yourOktaDomain}/oauth2/v1/authorize
不幸的是,OAuth2 实现似乎是特定于 Keycloak 的 -
com.gentics.mesh.core.rest.error.GenericRestException: 500 Internal Server Error oauth_config_error
at com.gentics.mesh.core.rest.error.Errors.error(Errors.java:124)
...
Caused by: java.lang.RuntimeException: Error while loading realm info. Got code {404}
at com.gentics.mesh.auth.MeshOAuth2ServiceImpl.fetchPublicRealmInfo(MeshOAuth2ServiceImpl.java:451)
它看起来像是在拼凑一个不适用于 Okta 的 url。
https://github.com/gentics/mesh/blob/f85dac8bf954248a6556323d792e6b849fb1d593/services/keycloak-auth/src/main/java/com/gentics/mesh/auth/MeshOAuth2ServiceImpl.java#L434
如果我没记错的话,可以更改实现 [MeshOAuth2ServiceImpl] 以支持任何 OIDC。
根据 Genetics Mesh 文档,OAuth2 is supported out of the box。我会使用 Okta 中的 OpenID Connect 功能来获取 JWT 并在 Genetics Mesh 中使用它。
有一个关于将 OIDC 与 KeyCloak 结合使用的配置示例,但您可以用您的 Okta 端点替换提供的 KeyCloak 端点。
security:
oauth2:
enabled: true
config:
realm: "master"
authServerUrl: "http://localhost:3000/auth" # Okta endpoint here
sslRequired: "external"
resource: "mesh"
credentials:
secret: "9b65c378-5b4c-4e25-b5a1-a53a381b5fb4" # application secret here
confidentialPort: 0
此外,根据文档,如果您需要角色映射,则必须 create an AuthServicePlugin
。
最近更新了身份验证机制。
Gentics Mesh 现在将充当资源服务器的角色。只要添加来自 OAuth 服务器的 public 密钥,它就可以接受任何 JWT。
插件 API 已更新以支持 oauth 用户和网格之间的自定义映射。例如,这允许您将多个 oauth2 用户映射到一个包含所需 roles/groups 的网格用户。您还可以创建一个 1:1 映射,其中每个 oauth2 用户都将添加到 Mesh。
OAuth 服务器的 public 密钥可以通过插件 API 加载或硬编码在 public-keys.json
文件中。
您可以在此处阅读有关此主题的更多信息: https://getmesh.io/docs/authentication/#_oauth2_oidc