Keycloak 如何通过API集成Key斗篷sms身份验证?
我有一个使用自定义密钥斗篷提供程序的密钥斗篷服务器和Laravel应用程序:Keycloak 如何通过API集成Key斗篷sms身份验证?,keycloak,keycloak-rest-api,Keycloak,Keycloak Rest Api,我有一个使用自定义密钥斗篷提供程序的密钥斗篷服务器和Laravel应用程序: public function loginByEmail(string $email, string $password): SsoTokens { try { $data = $this->realmEndpoint->makeRequest( HttpClientProvider::METHOD_POST, self::KEYCLO
public function loginByEmail(string $email, string $password): SsoTokens
{
try {
$data = $this->realmEndpoint->makeRequest(
HttpClientProvider::METHOD_POST,
self::KEYCLOAK_AUTH_URL,
[
'client_id' => config('services.keycloak.realm_client'),
'client_secret' => config('services.keycloak.realm_secret'),
'grant_type' => 'password',
'username' => $email,
'password' => $password,
'scope' => 'openid'
]
);
} catch (TransportUnauthorizedException $e) {
throw new UnauthorizedException($e);
} catch (HttpClientException $e) {
throw new TransportException($e);
}
return $this->extractTokens($data);
}
现在我的目标是通过用户的手机号码建立基本的短信认证。我发现了一些工具(,),但它们不提供API,只提供HTML页面。
有解决办法吗?我找到了解决办法。
要在不知道某人密码的情况下登录:
令牌交换
需要密钥斗篷功能
步骤1-3我用Laravel实现,步骤4-5用KeyClope API实现:
public function loginByUserId(string $userId): SsoTokens
{
try {
$impersonatorData = $this->realmEndpoint->makeRequest(
HttpClientProvider::METHOD_POST,
self::KEYCLOAK_AUTH_URL,
[
'client_id' => config('services.keycloak.realm_client'),
'client_secret' => config('services.keycloak.realm_secret'),
'grant_type' => 'password',
'username' => config('services.keycloak.admin_username'),
'password' => config('services.keycloak.admin_password'),
'scope' => 'openid',
]
);
$data = $this->realmEndpoint->makeRequest(
HttpClientProvider::METHOD_POST,
self::KEYCLOAK_AUTH_URL,
[
'client_id' => config('services.keycloak.realm_client'),
'client_secret' => config('services.keycloak.realm_secret'),
'grant_type' => 'urn:ietf:params:oauth:grant-type:token-exchange',
'requested_subject' => $userId,
'subject_token' => $impersonatorData['access_token'],
'scope' => 'openid',
]
);
} catch (TransportUnauthorizedException $e) {
throw new UnauthorizedException($e);
} catch (HttpClientException $e) {
throw new TransportException($e);
}
return $this->extractTokens($data);
}
这回答了你的问题吗@zaerymoghaddam谢谢你,但是没有。在我的问题中,我提到了nickpack的包,它没有实现与之交互的API。