java实现飞连OIDC授权登录

飞连的授权登录和微信、QQ等授权登录实现方式类似,直接看实现步骤

1.在飞连内部创建要授权的应用

按照飞连提供的文档进行操作就可,需要注意的是回调地址,回调地址是你要接收飞连认证接口所返回code码的接口地址。

2.调用飞连的认证登录接口(/api/oidc/authorize)

这个接口可以让前端来请求,后端将地址拼接好返回给前端,以重定向到百度举例

'飞连提供的ip'/api/oidc/authorize?client_id=xxxx&redirect_uri=xxxx?url=https://www.baidu.com/&response_type=code&scope=openid

此为重定向百度的路径,按照你的情况补充即可,本地测试会涉及到内网穿透,因为飞连直接访问不到你的地址,内网穿透工具ngrok安装可看我之前文章

代码实现

我这里的callBack方法就是前面填写的回调地址接口,注意你的回调接口是一定要接收授权的code码参数,不然会提示你回调错误

url实际实现时前端会将系统回调地址传回来

code参数拼接在这里是为了重定向以后接收飞连的授权code码

重定向后是这个效果,code拼接在回调地址后

3.接下来就简单了,前端会拿到code码,将code码回传给你调用你的获取token接口(/api/oidc/token)

注意token接口需要form表单形式请求,我这里是用的restTemplate实现,还有别的方式可自行百度

public String tokenData(String code,String suffix){
        String url = thisUrl + token;
        String accessToken = "";
        LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        map.add("client_id",clientId);
        map.add("client_secret",clientSecret);
        map.add("grant_type","authorization_code");
        map.add("code",code);
        map.add("redirect_uri",redirectUrl+"?url="+suffix);//这里的suffix是前端把回调地址在给一遍,因为认证的回调地址和这里的回调地址必须一致,不然会报回调参数错误,应该是拿两次的回调地址做了比较
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-type","application/x-www-form-urlencoded");
        HttpEntity<LinkedMultiValueMap<String,String>> formEntity = new HttpEntity<>(map, headers);
        ResponseEntity<String> stringResponseEntity = null;
        try {
            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, formEntity, String.class);
            String body = exchange.getBody();
            Map<String, String> jsonMap = JSON.parseObject(body, new TypeReference<HashMap<String, String>>() {});
            if(null != jsonMap){
                accessToken = jsonMap.get("access_token");
            }
        } catch (RestClientException e) {
            e.printStackTrace();
        }
        return accessToken;
    }

4.获取到token以后再获取用户信息(/api/oidc/userinfo/normal)

public String userinfo(String token){
        String url = thisUrl + userinfo+"?access_token="+token;
        String result = null;
        String jsonResult = restTemplate.getForObject(url, String.class);
        if(StringUtils.isNotEmpty(jsonResult)){
            JSONObject jsonObject =  JSON.parseObject(jsonResult);
            result = (String) jsonObject.get("email");
        }
        return result;
    }

按照自己的实际业务获取参数就可

接下来就按照自己的实际业务处理即可

5.登出接口也是前端直接调用即可

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值