發送認證到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