接入第三方登录-百度社会化服务

2015 / 08 / 20 html

资料

步骤

  • 用百度ID登录开发者平台

  • 新建应用 在应用设置里面设置社会化服务的回调地址

  • 在社会化服务里面设置PC端JS组件设置

  • copyjs到登录页面。编写第三方验证成功之后的回调逻辑。

##回调逻辑

  1. 你点击第三方登录图标的时候,是会发起一个请求authorize,获取Authorization Code,授权方式介绍这里面的第一步的请求。

    1.1 参数说明

    client_id:必须参数,注册应用时获得的API Key。
    response_type:必须参数,此值固定为“code”。
    media_type:必须参数,需要登录的社会化平台标识,具体参数定义可以参考“《支持的社会化平台》”一节。
    redirect_uri:必须参数,授权后要社会化服务回跳的URI,即接收Authorization Code的URI。对于无Web Server的应用,其值可以是“oob”,此时用户同意授权后,授权服务会将Authorization 
    Code直接拼接在响应页面的URL参数中。如果redirect_uri不为"oob",则redirect_uri指向的页面必须与开发者在“社会化登录服务”中所填写的"社会化服务回跳地址"相匹配。
    state:非必须参数,用于保持请求和回调的状态,授权服务器在回调时(重定向用户浏览器到“redirect_uri”时),会在Query Parameter中原样回传该参数。建议开发者利用state参数来防止CSRF攻击。
    display:非必须参数,登录和授权页面的展现样式,默认为”page”,具体参数定义可以参考“《授权页面样式》”一节。
    client_type:非必须参数,用来标识请求来源于哪一个客户端。如果在请求中传递了该参数,则可以在开发者中心应用管理中查看到相关统计数据。client_type的值可为“ios”、”android”、”web”中的任意一种。
  2. 请求会回调你在百度开发者和代码参数里面设置的那个redirect_uri地址

  3. redirect_uri的服务端捕获code参数,然后发送token登录请求.授权方式介绍这里面的第二步的请求。

  4. 请求参数

    grant_type:必须参数,此值固定为“authorization_code”;
    code:必须参数,通过上面第一步所获得的Authorization Code;
    client_id:必须参数,应用的API Key;
    client_secret:必须参数,'应用的Secret Key;
    redirect_uri:必须参数,该值必须与获取Authorization Code时传递的“redirect_uri”保持一致。
  5. 返回参数

    access_token:要获取的Access Token;
    expires_in:Access Token的有效期,以秒为单位;
    media_type:用户登录的社会化平台标识;
    media_uid:用户在“media_type”代表的社会化平台上的唯一uid/openid;
    social_uid:用户在百度社会化服务当中分配的唯一用户id;
    name:用户名;
    session_key:基于http调用Social API时所需要的Session Key,其有效期与Access Token一致;
    session_secret:基于http调用Social API时计算参数签名用的签名密钥。

    5.1 media_type说明

    * baidu:百度。
    * sinaweibo:新浪微博。
    * qqdenglu:QQ账号登录。
    * qqweibo:腾讯微博。
    * renren:人人网。
    * kaixin:开心网。
  6. 得到唯一的 social_uid id之后,关联到用户表做好绑定关系。

隐式登录设计

对原有用户表的一个扩充,加入了一个第三方登录绑定表(用户表ID,平台类别,平台主键,平台用户名,访问授权码)等。
当登录的时候 首先查询平台主键是否有关联用户表ID
如果有 查询出用户表ID 然后调用正常的登录方法,
如果没有,就新增用户,
然后继续调用正常的登录方法

官网例子

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <H1>欢迎光临</H1>
    <div>
    请您使用第三方平台账号登陆:
    <span id="login"></span>
    </div>
    <script type="text/javascript" id="bd_soc_login_boot"></script>
    <script type="text/javascript">
    (function(){
        var t = new Date().getTime(),
            script = document.getElementById("bd_soc_login_boot"),
            redirect_uri = encodeURIComponent("http://test.duapp.com/social/oauth/callback"),
            domid = "login",
            src = "http://openapi.baidu.com/social/oauth/2.0/connect/login?redirect_uri=" + redirect_uri + "&domid=" + domid + "&client_type=web&response_type=code&media_types=sinaweibo%2Cqqdenglu%2Cbaidu%2Cqqweibo%2Ckaixin&size=-1&button_type=2&client_id=NKqWqr6T7NbDv8vkoKMBEmbu&view=embedded&t=" + t;
        script.src = src;
    })();
    </script>
    </body>
</html>