Keycloak 如何通过API集成Key斗篷sms身份验证?

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

我有一个使用自定义密钥斗篷提供程序的密钥斗篷服务器和Laravel应用程序:

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页面。 有解决办法吗?

我找到了解决办法。 要在不知道某人密码的情况下登录:

  • 发送短信
  • 通过密码确认电话号码
  • 获取目标用户的密钥斗篷ID
  • 以有权访问的用户身份登录
  • 与目标用户交换令牌
  • 令牌交换
    需要密钥斗篷功能

    步骤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。