Keycloak自定义实现第三方登录

本文介绍如何使用Keycloak自定义实现第三方登录,以酷家乐Oauth2接口为例,详细讲解了实现流程,包括定制Provider、解析accessToken以及获取用户信息等步骤。

Keycloak自定义实现第三方登录

第三方Oauth登录

  • 由于对接的第三方IDP不一定都是标准的openid connect实现,所以都需要根据第三方的Oauth文档进行定制;
    Keycloak对于新增Social IDP的实现,都是标准,以及灵活的;
    我们完全可以参照 Keycloak 本身已实现的Github LinkedIn等,快速实现我们的需求;

我们这里以酷家乐的Oauth2 接口进行说明

酷家乐 Oauth2接口分析

  • 请求code的参数及返回都是标准的,这里无需进行修改在这里插入图片描述
  • 换取token接口,由于返回参数进行data的wrap,以及字段名为驼峰的,所以需要对这部分进行修改定制

在这里插入图片描述

  • 获取用户信息

由于获取用户信息,还需要额外请求用户的OpenId,所以需要对该部分进行修改

在这里插入图片描述

在这里插入图片描述

定制Provider

提供工程类: KujialeIdentityProviderFactory

工厂类完全可以从GitHubIdentityProviderFactory 拷贝过来,修改成自己 PROVIDER_ID, NAME 以及create自己的Provider

public class GitHubIdentityProviderFactory extends AbstractIdentityProviderFactory<GitHubIdentityProvider> implements SocialIdentityProviderFactory<GitHubIdentityProvider> {

    public static final String PROVIDER_ID = "github";

    @Override
    public String getName() {
        return "GitHub";
    }

    @Override
    public GitHubIdentityProvider create(KeycloakSession session, IdentityProviderModel model) {
        return new GitHubIdentityProvider(session, new OAuth2IdentityProviderConfig(model));
    }

    @Override
    public OAuth2IdentityProviderConfig createConfig() {
        return new OAuth2IdentityProviderConfig();
    }

    @Override
    public String getId() {
        return PROVIDER_ID;
    }
}

解析accessToken 以及获取用户信息

在这里插入图片描述

解析用户信息

在这里插入图片描述

KujialeIdentityProvider 完整代码

public class KujialeIdentityProvider extends AbstractOAuth2IdentityProvider implements SocialIdentityProvider {
   
   

    public static final String AUTH_URL = "https://oauth.kujiale.com/oauth2/show";
    public static final String TOKEN_URL = "https://oauth.kujiale.com/oauth2/auth/token";
    public static final String OPENID_URL = "https://oauth.kujiale.com/oauth2/auth/user";
    public static final String PROFILE_URL = "https://oauth.kujiale.com/oauth2/openapi/user";
    public static final String DEFAULT_SCOPE = "get_user_info";

    public static final String OAUTH2_PARAMETER_ACCESS_TOKEN = "accessToken";

    public KujialeIdentityProvider(KeycloakSession session, OAuth2IdentityProviderConfig config) {
   
   
        super(session, config);
        config.setAuthorizationUrl(AUTH_URL);
        config.setTokenUrl(TOKEN_URL
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值