欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

50-互联网安全架构-互联网API开放平台安全设计-基于OAuth2.0协议方式

程序员文章站 2023-12-27 14:04:51
...

1.什么是Oauth2.0认证过程

  1. 为什么会产生oauth2.0认证
    互联网开放瓶体相互调用保证安全性(大型互联网公司)
  2. 什么是开放平台:暴露公网提供API接口
    微信联合登陆(读取微信头像),需要调用微信提供的第三方用户信息接口

2. 整个oauth2.0原理

oauth2.0原理(appid、appsecret、access_token、openid、回调地址、授权地址)
50-互联网安全架构-互联网API开放平台安全设计-基于OAuth2.0协议方式
步骤:
1、在微信开放平台申请对应的appid信息
2、项目生成登陆授权链接
3、用户在确认微信登陆之后,跳转到回调地址(配置域名权限)
4、获取授权码code,使用授权码获取对应的access_token(调用腾讯接口权限)
5、使用access_token + openid获取用户相关信息

3. 第三方联合登陆过程

如何实现联合登陆, 底层是如何实现的?
在设计表user中
user_id, user_name, password, …, weixin_openid(数据库保存授权后openid)
那么程序中如何实现第二次不需要账号和密码登陆?
1、调用获取用户的openid
2、使用用户的openid去数据库表查询是否有对应的openid
3、如果有对应的openid,直接生成对应的令牌
4、没有对应的openid,那么久需要关联账号

@RequestMapping("/authorizedUrl")
    public String authorizedUrl() {
        String authorizedUrl = weiXinUtils.getAuthorizedUrl();
        System.out.println("authorizedUrl : " + authorizedUrl);
        //直接走重定向到微信开放平台
        return "redirect:" + authorizedUrl;
    }

    @RequestMapping("/callback")
    public String callback(String code) {
        //1. 用户同意授权,获取code
        if (StringUtils.isEmpty(code)) {
            return "errorPage";
        }
        //2. 通过code获取网页授权access_token(调用微信接口权限)
        String accessTokenUrl = weiXinUtils.getAccessTokenUrl(code);
        JSONObject jsonObject = HttpClientUtils.httpGet(accessTokenUrl);
        //3. 判断保温json中是够有errorCode
        boolean containsErrorCode = jsonObject.containsKey("errorCode");
        if (containsErrorCode) {
            return "errorPage";
        }

        String accessToken = jsonObject.getString("access_token");
        if (StringUtils.isEmpty(accessToken)) {
            return "errorPage";
        }
        String openid = jsonObject.getString("openid");
        if (StringUtils.isEmpty(openid)) {
            return "errorPage";
        }
        //4. 拉去用户信息
        String userInfo = weiXinUtils.getUserInfo(accessToken, openid);
        JSONObject userInfoResult = HttpClientUtils.httpGet(userInfo);
        //5.
        System.out.println("userInfoResult: " + userInfoResult);
        return "success";
    }


实现微信授权获取信息
微信网页授权地址
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

1.填写网页授权回调地址权限


2.生成网页授权地址
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx5c43fde3c9733d9e&redirect_uri=http://meitedu.s1.natapp.cc&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect


3.跳转到回调地址获取授权码

http://meitedu.s1.natapp.cc/?code=061yIRgM13IOc41ZQveM1tODgM1yIRge&state=STATE

4. 通过code换取网页授权access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx5c43fde3c9733d9e&secret=b8b217126c33a5fb7074927d5e72a81a&code=061WfM4E0TABnc2Cv04E02Lb5E0WfM4b&grant_type=authorization_code

4. 拉取用户信息(需scope为 snsapi_userinfo)

https://api.weixin.qq.com/sns/userinfo?access_token=11_ZsmU50peG5LkOxn6XiFwXl9PRmlAlrFvWZ9fgxd3OM-vbiAHt_uf7gqG9iA9MnfIqf375eI8rkxf6GyqdsAkWw&openid=okYSmtzp4wWCrDCncMfGSRECVSeM&lang=zh_CN
相关标签: 互联网安全架构

上一篇:

下一篇: