1. 程式人生 > >第三方登入功能的實現

第三方登入功能的實現

剛開始做的時候感覺高大上
為什麼要使用第三方登入:

一般稍微作為一個大點的專案,為了提高使用者的群體都會做第三方登入(如:QQ,微信,新浪等)

在往下看之前先註冊第三方網站的開發者賬號,建立應用完成稽核。

要實現第三方登入的功能首先要明白oauth2.0的認證原理,由於第三方登入的認證授權流程大致都是一樣的,在這裡我只講QQ的登入授權流程:

其授權驗證流程示意圖如下:
這裡寫圖片描述

  1. client先訪問:PC網站:https://graph.qq.com/oauth2.0/authorize
    引數有: response_type=code 固定
    client_id 申請應用時分配的id
    redirect_uri 回撥的url 你自己網站的一個地址

  2. 通過第一步會返回 code碼(注意:此code會在10分鐘內過期)

  3. 通過Authorization Code獲取Access Token(通過地址:https://graph.qq.com/oauth2.0/token?)
    此時引數有:
    grant_type
    client_id
    client_secret: 申請QQ登入成功後,分配給網站的appkey。
    code: 上一步返回的authorization code。
    redirect_uri

  4. 此刻你已經拿到了Access Token , 然後就是獲取使用者OpenID_OAuth2.0
    https://graph.qq.com/oauth2.0/me
    ?access_token=獲取到的Access Token
  5. 根據第4步你會拿到(openid): callback( {“client_id”:”YOUR_APPID”,”openid”:”YOUR_OPENID”} );

返回結果:

{
“ret”:0,
“msg”:”“,
“nickname”:”YOUR_NICK_NAME”,

}
下面直接看程式碼(控制層):

/**
 * 
 * 首頁
 * 
 * @author Administrator
 *
 */
@Controller
@RequestMapping
("/qqLogin") public class HomePageController { @RequestMapping("/login") public String login(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException { try { AccessToken accessTokenObj = (new Oauth()) .getAccessTokenByRequest(request); String accessToken = null, openID = null; if (accessTokenObj.getAccessToken().equals("")) { System.out.print("沒有獲取到響應引數"); return "error"; } else { accessToken = accessTokenObj.getAccessToken(); session.setAttribute("accessToken", accessToken); // 利用獲取到的accessToken 去獲取當前用的openid OpenID openIDObj = new OpenID(accessToken); openID = openIDObj.getUserOpenID(); session.setAttribute("openID", openID); return "success"; } } catch (QQConnectException e) { // TODO Auto-generated catch block e.printStackTrace(); return "error"; } } @RequestMapping("/homePage") public String homePage(Model model) { return "index"; } @RequestMapping("/inQQ") public void inQQ(Model model, HttpServletResponse response, HttpServletRequest request) { try { response.sendRedirect(new Oauth().getAuthorizeURL(request)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (QQConnectException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

檢視層:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- <%@include file="/inc/taglib.jsp"%> --%>
<body>
<h2>Hello World!ss</h2>

    <a href="${pageContext.request.contextPath} /qqLogin/inQQ">請使用你的QQ賬號登陸</a>

</body>

記得別忘了導包
解開來見證奇蹟的時刻到了:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

至此結束!!!!!!!!

有需要原始碼的留下qq郵箱