OpenID代碼示例(自用)

發送認證到OP
1.  //建立消費者對象,它將向認證服務器發出認證請求
2.  ConsumerManager manager = new ConsumerManager();
3.  //setAssociations方法設置與OP的關聯存放的位置,能夠把它存在內存或者數據庫或者xml或者文件中,這裏將它存放在內存
4.  manager.setAssociations(new InMemoryConsumerAssociationStore());
5.  //setNonceVerifier方法設置記錄response_nonce的位置
6.  manager.setNonceVerifier(new InMemoryNonceVerifier(5000));
7.  //下載OpenID提供者列表(通常只有一個提供者)
8.  List discoveries = manager.discover("https://example.com/login/openid/user/");
9.  //經過關聯獲取和OpenID提供者之間的共享密鑰
10. DiscoveryInformation discovered = manager.associate(discoveries);  
11. //將關聯(發現信息)保存,以備以後的使用
12. session.setAttribute("openid-disc", discovered);
13.  
14. //要重定向的地址
15. String returnURL = "http://example.com/openidresponse.jsp";
16. //將用戶重定向到他們的OpenID提供者頁面,並告訴OpenID提供者外部站點的地址
17. AuthRequest authReq = manager.authenticate(discovered, returnURL);
18. //在重定向以前添加額外的請求參數(email,fullname)
19. FetchRequest fetch = FetchRequest.createFetchRequest();
20. fetch.addAttribute("email", "http://schema.openid.net/contact/email", true);
21. fetch.addAttribute("fullname", "http://openid.net/schema/namePerson/friendly", true);
22. authReq.addExtension(fetch);
23. //重定向到OP認證
24. response.sendRedirect(authReq.getDestinationUrl(true));
接收來自OpenID提供者認證信息
1.  //獲取響應參數列表
2.  ParameterList response = new ParameterList(request.getParameterMap());
3.  DiscoveryInformation discovered = (DiscoveryInformation) session.getAttribute("openid-disc ");
4.  StringBuffer receivingURL = request.getRequestURL();
5.  String queryString = request.getQueryString();
6.  if (queryString != null && queryString.length() > 0)
7.      receivingURL.append("?").append(request.getQueryString());
8.  //根據參數列表,關聯句柄以及url_query驗證是否經過認證
9.  VerificationResult verification = manager.verify(receivingURL.toString(), response, discovered);
10. Identifier verified = verification.getVerifiedId();
11. if (verified != null) {
12.     if (authSuccess.hasExtension(AxMessage.OPENID_NS_AX)) {
13.         FetchResponse fetchResp = (FetchResponse) authSuccess.getExtension(AxMessage.OPENID_NS_AX);
14.         List emails = fetchResp.getAttributeValues("email");
15.         email = (String) emails.get(0);
16.         List fullNames = fetchResp.getAttributeValues("fullname");
17.         fullName = (String) fullNames.get(0);
18.          // success..
19.     }
20. }
21. else
22.     // OpenID authentication failed
相關文章
相關標籤/搜索