跳过内容

Keycloak

GitHub

Keycloak 通过内置的通用 OAuth2 提供者工作。您不需要为 Keycloak 创建新的本机提供者。将您的 Keycloak 客户端配置为 OpenID Connect 客户端,并使用 provider: 'oauth2' 一个稳定的 providerId例如 keycloak.

Keycloak 客户端设置

标题:Keycloak 客户端设置

在您的 Keycloak 领域中,创建或打开用于您的 Capacitor 应用的客户端:

  1. 使用授权 code 流程。
  2. 在应用配置中保持 PKCE 启用。
  3. 为您的应用注册每个重定向 URI,例如 myapp://oauth/keycloak 用于移动设备和生产Web的HTTPS回调URL。
  4. 使用范围,如 openid profile email.添加 offline_access 仅在您的域和客户端配置为发行刷新令牌时使用。

发行者URL的确切值取决于部署。当前的Keycloak部署通常在 https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration中发布域元数据,但一些部署包含额外的基路径。使用您的域的OpenID端点配置显示的发行者URL。

首选 issuerUrl 以便插件可以从域元数据中发现授权、令牌和注销端点:

import { SocialLogin } from '@capgo/capacitor-social-login';
const keycloakIssuer = 'https://keycloak.example.com/realms/my-realm';
await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
issuerUrl: keycloakIssuer,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email',
pkceEnabled: true,
resourceUrl: `${keycloakIssuer}/protocol/openid-connect/userinfo`,
},
},
});
const result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'keycloak',
},
});
console.log(result.result.idToken);
console.log(result.result.accessToken?.token);
console.log(result.result.resourceData);

对于刷新令牌,请求 offline_access 只有当您的Keycloak实例和客户端允许为此应用程序刷新令牌时:

await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
issuerUrl: keycloakIssuer,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

手动端点回退

标题:手动端点回退

如果OIDC发现被阻止或您的部署未向应用程序公开元数据,请直接配置端点。保持基准URL与您的Keycloak部署发布的完全一致:

const keycloakRealmUrl = 'https://keycloak.example.com/realms/my-realm';
await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
authorizationBaseUrl: `${keycloakRealmUrl}/protocol/openid-connect/auth`,
accessTokenEndpoint: `${keycloakRealmUrl}/protocol/openid-connect/token`,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email',
pkceEnabled: true,
resourceUrl: `${keycloakRealmUrl}/protocol/openid-connect/userinfo`,
logoutUrl: `${keycloakRealmUrl}/protocol/openid-connect/logout`,
},
},
});

Auth Connect兼容性

标题:Auth Connect兼容性

Keycloak不是Auth Connect预设提供商ID之一。如果您已经使用 SocialLoginAuthConnect,仍然可以初始化通用 oauth2 提供商并使用 provider: 'oauth2' 进行登录 providerId: 'keycloak'.

查看 Keycloak OpenID Connect endpoint reference 了解发现和端点路径。

如果您正在使用

Keycloak

Keycloak OpenID Connect endpoint reference 了解发现和端点路径。 为了计划身份验证和帐户流程,连接它与 使用 @capgo/capacitor-social-login 对于本地能力的 @capgo/capacitor-social-login @capgo/capacitor-social-login 对于 @capgo/capacitor-social-login 的实现细节 @capgo/capacitor-passkey 对于 @capgo/capacitor-passkey 的实现细节 @capgo/capacitor-native-biometric 对于 @capgo/capacitor-native-biometric 的实现细节,以及 双因素身份验证 对于双因素身份验证的实现细节