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 网址 -
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。