openID是一个分散式身份识别协议,在其基础上实现了网上身份认证系统。可以将您的系统使用openID来作为用户登录,让你的程序支持opendID。我使用的是http://www.openid.org.cn/ 作为openID提供商,使用openid4java库编写openID依赖方。
以下根据openid4java文档写的一个demo
发起openID请求的action
//yuyong 2012-2-10
public class OpenIDLoginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private ISampleConsumerManager sampleConsumerManager;
private AuthRequest authReq;
private String openID=null;
ActionContext context = ActionContext.getContext();
HttpServletRequest request = null;
HttpServletResponse response = null;
Map<String,Object>pm=null;
String actionURL;
public String execute()throws Exception{
if(openID!=null&&openID.startsWith("http://")){
openID=openID.replaceAll("http://", "");
}
String returnToUrl="http://localhost:8181/SSO/firstPageAction.action";
ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
authReq=sampleConsumerManager.authRequest(openID, returnToUrl,request,response, request.getSession());
Map<String,Object>pm=authReq.getParameterMap();
this.pm=pm;
this.actionURL=authReq.getOPEndpoint();
request.setAttribute("pm", pm);
request.setAttribute("actionURL", authReq.getOPEndpoint());
return SUCCESS;
}
}
将用户的OpenID帐户和返回url封装成openID请求 AuthRequest
//yuyong 2012-2-10
public class SampleConsumerManager implements ISampleConsumerManager{
public ConsumerManager manager;
public SampleConsumerManager()throws ConsumerException{
manager=new ConsumerManager();
manager.setAssociations(new InMemoryConsumerAssociationStore());
manager.setNonceVerifier(new InMemoryNonceVerifier(5000));
}
//将openID,返回url封装为一个openID请求
public AuthRequest authRequest(String userSuppliedString,
String returnToUrl, HttpServletRequest httpReq,
HttpServletResponse httpResp,HttpSession session)
throws IOException {
try {
List discoveries=manager.discover(userSuppliedString);
DiscoveryInformation discovered=manager.associate(discoveries);
session.setAttribute("discovered", discovered);
AuthRequest authReq=manager.authenticate(discovered, returnToUrl);
httpResp.sendRedirect(authReq.getDestinationUrl(true));
return authReq;
} catch (DiscoveryException e) {
e.printStackTrace();
} catch (MessageException e) {
e.printStackTrace();
} catch (ConsumerException e) {
e.printStackTrace();
}
return null;
}
//验证openID登录验证的返回
public Identifier verifyResponse(HttpServletRequest httpReq,
HttpSession session) throws IOException {
ParameterList openidResp=new ParameterList(httpReq.getParameterMap());
DiscoveryInformation discovered=(DiscoveryInformation) session.getAttribute("discovered");
StringBuffer receivingURL=httpReq.getRequestURL();
String queryString=httpReq.getQueryString();
if(queryString!=null&&queryString.length()>0)
receivingURL.append("?").append(httpReq.getQueryString());
try {
VerificationResult verification=manager.verify(receivingURL.toString(), openidResp, discovered);
Identifier verified=verification.getVerifiedId();
return verified;
} catch (MessageException e) {
e.printStackTrace();
} catch (DiscoveryException e) {
e.printStackTrace();
} catch (AssociationException e) {
e.printStackTrace();
}
return null;
}
}
应用程序验证openID请求验证的返回
//yuyong 2012-2-10
public class FirstPageAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private ISampleConsumerManager sampleConsumerManager=null;
private HttpServletRequest request=null;
private HttpServletResponse response=null;
private HttpSession session=null;
public String execute()throws Exception{
if(sampleConsumerManager.verifyResponse(request, session)!=null)
return SUCCESS;
else
return ERROR;
}
}
struts.xml
<action name="openIDLoginAction" class="openIDLoginAction">
<param name="openID">
http://yuyongwuhu.openid.org.cn/
</param>
<result name="success">/continue.jsp</result>
</action>
<action name="firstPageAction" class="FirstPageAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
continue.jsp 提交封装后的openID请求到openID OP端
<body onload="document.forms['openid-form-redirection'].submit();">
<form id="openid-form-redirection" action="<s:property value="#request.actionURL"/>">
<s:iterator value="#request.pm">
<input type="hidden" name="<s:property value="key"/>" value="<s:property value="value"/>" />
</s:iterator>
</form>
</body>
只是为了实现第一个demo,只是为了看到效果,所以代码组织的不太规范。
大致过程是 SampleConsumerManager 通过Discovery进程,根据用户OpenID的帐户
定位到相应的openID提供商,然后将相应参数提交到openID op端的action。
op端提供一个页面输入密码。验证成功后,返回到 returnToUrl ,应用中,在
returnToUrl中的action验证op的response。
分享到:
相关推荐
《网络游戏-基于计算机网络的身份识别系统》是一份深入探讨在线游戏领域中身份验证技术的资料。这份资料的核心在于如何在虚拟世界中确保玩家的真实身份,从而保障网络安全、防止欺诈行为,以及维护游戏环境的公平性...
OpenID是微信小程序用户身份的一种标识符,它允许应用在遵循微信平台安全策略的同时,识别并管理不同用户。下面我们将深入探讨如何在Java中实现这一功能,并涉及与之相关的其他小程序操作。 首先,你需要注册成为...
openid是微信为每个小程序用户分配的一个唯一标识,它用于识别用户,而不会泄露用户的微信号。在2018年微信小程序的改版后,为了增强安全性,开发者不能直接在小程序前端调用微信的API获取openid,必须通过自己的...
- **身份验证与授权分离**:OpenID负责用户的认证过程,而OAuth则专注于授权管理,两者相辅相成,共同构建起一套完整且安全的身份管理体系。 - **增强隐私保护**:通过OpenID与OAuth的结合使用,用户可以更好地控制...
4. OAuth和OpenID Connect:现代Web应用常用的第三方身份验证协议,允许用户通过第三方服务(如Google、Facebook等)进行身份验证。 二、Forms身份验证 Forms身份验证是Web开发中最常用的机制,尤其在ASP.NET中。...
openid是微信平台为每个用户生成的唯一标识符,用于保护用户隐私的同时实现用户身份验证,确保只有合法用户可以访问和使用小程序。 OCR识别技术在此处扮演了关键角色。发票通常是图像形式,包含大量文字信息,如...
最后,身份认证协议如Kerberos、OAuth、OpenID等,为不同系统和应用之间的身份验证提供了标准和框架。这些协议确保了安全的身份交换,并且通常包括了多重身份验证的元素,提高了整体安全性。 在计算机网络安全领域...
OpenID是微信用户在小程序中的唯一标识,用于安全地识别用户身份。 在微信小程序的开发中,当用户授权后,小程序会返回一个code码,这个code是临时的,但它是获取OpenID的关键。开发者需要将这个code发送到自己的...
总结来说,一个有效的身份认证系统是网络安全的基础,它结合了多种技术手段和设计理念,以确保用户身份的正确性,并且在保障安全的同时,也要考虑到用户体验和系统可扩展性。通过不断优化和升级,身份认证系统能够在...
总之,利用C#和企业微信的API,我们可以轻松地构建一个能够识别和管理企业微信用户身份的应用。通过VS2016的开发环境和SQL2008数据库支持,我们可以构建稳定且功能强大的系统。在这个过程中,理解并熟练掌握C#编程、...
1. 身份验证流程的改进:详细说明了如何在证书申请过程中结合多种身份验证手段,可能包括在线与离线验证的结合。 2. 安全策略:如何设置和实施针对不同级别的用户和设备的个性化安全策略。 3. 证书生命周期管理:...
OpenID则用于身份认证,它允许用户使用一个单一的账户登录多个不同的网站。这种认证和授权机制可以确保用户在使用情感识别服务时的安全性,同时也保护了用户数据的隐私。 该平台的实现和案例研究,验证了平台的可行...
4. 身份认证设备:在PaaS环境中,身份认证可能涉及多种设备,如智能手机、智能卡、硬件安全模块(HSM)、生物识别设备等。这些设备为用户提供便捷的认证方式,同时增强了系统的安全性。 5. PaaS平台上的身份认证...
标题“08-identity-in-ten-hundred-words”似乎是指一个关于身份识别技术的专题,而描述中的“08-identity-in-ten-hundred-words”可能代表这是该系列的第八部分,专注于通过一千个词来简洁地阐述身份识别的主题。...
5. 身份验证服务:利用中央身份管理系统,如OAuth或OpenID Connect,可以集中管理用户身份和访问权限。 电子控制程序的设计则需要考虑系统的易用性、可靠性和可扩展性。这可能涉及到: 1. 安全设计原则:如最小...
另外,OpenID Connect是基于OAuth的协议,为身份验证添加了一个层,使得服务提供商能够验证用户身份,而无需直接处理用户密码。这种开放标准促进了跨平台的单点登录(SSO)体验。 身份验证还涉及到会话管理和会话...
4. **协议标准**:可能会涉及OpenID Connect、SAML 2.0等身份验证协议,这些协议允许不同系统之间的安全通信和身份验证信息交换。 5. **安全性与隐私**:设计中的安全措施至关重要,包括数据加密、防止中间人攻击、...
1. **身份认证的类型**:身份认证通常分为基于知识的认证(如密码)、基于拥有的认证(如智能卡)和基于生物特征的认证(如指纹或面部识别)。方案可能会分析各种类型的优缺点以及在不同场景下的适用性。 2. **多...