`
lengyun3566
  • 浏览: 452723 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
D59180b9-02f1-3380-840c-ea34da46143c
《Spring Secur...
浏览量:383547
社区版块
存档分类
最新评论

《Spring Security3》第八章第一部分翻译(OpenID与Spring Security)

阅读更多

 

第八章 OpenID开放

 

OpenID是很流行的可信任身份管理方式,它允许用户通过一个单独的可信任提供者(provider)管理其身份信息。这个便利的功能为用户提供了安全的方式即使用可信任的OpenID提供者来存储器密码和个人信息,并可以随意的基于请求获取其个人信息。另外,启用OpenID功能的站点能够确信用户提供的OpenID凭证信息就是他们所说的人。

   在本章中,我们将会:

l  学习在五分钟之内建立自己的OpenID

l  使用快速实现的OpenID来配置JBCP Pets站点;

l  学习OpenID的概念架构以及它怎样为你的站点提供可信任的用户访问;

l  实现基于OpenID的用户注册;

l  体验OpenID属性交换得到用户简介功能;

l  检查基于OpenID登录的安全性。

OpenID承诺的世界

         作为一项技术,OpenID的承诺是允许web上的用户通过一个可信任的提供者集中管理他们的个人数据和信息,然后这个可信任的提供者作为代理与用户想交互的站点建立起互信。

         概念上来说,这种类型的登录要通过一个长时间存在的可信任第三方,可以有多种方式(如Microsoft Passport,曾经是最知名的中心登录服务)。OpenID的区别优势在于OpenID提供者(OpenID Provider)仅仅需要实现一个协议,这个协议与任何试图通过OpenID进行集成登录的站点相协调。OpenID规范本身也是一个开放的规范,这就导致出现了不同的提供者但运行相同的协议。这对健康竞争是一种好事,也有利于客户的选择。

         下图整体说明了一个集成OpenID的站点在登录过程中与OpenID提供者之间的关系:



 我们可以看到用户以唯一名字标识的方式提供自己的凭证信息,一般是统一资源标识符(Uniform Resource IdentifierURI),这是OpenID提供者分配给用户的,用来唯一标识用户和OpenID提供者。这通常是OpenID提供者URI的子域名(如:https://jamesgosling.myopenid.

com/),或者在OpenID提供者URI上添加唯一标识(如:https://me.yahoo.com/jamesgosling)。我们可以看到这两种方式的URL都能很明确的标识出OpenID提供者(通过域名)和唯一的用户标识。

         【不要不加考虑地信任OpenID。在这里你看到我们可以伪装系统中的用户。我们可以用一个OpenID登录,它可能会以为我们是James Gosling,当然我们不是。不要做这样错误的假设,即因为有一个听起来令人信服的OpenID(或OpenID代理提供者)那他们就是认证过的人了,而不需要额外方式的认证。以另外的方式想一下这个问题,如果有个人敲你的门并说自己是James Gosling,你会不检查他的ID就让他进来吗?】

         启用OpenID的应用接下来会重定向到OpenID提供者哪里,在这里用户提供他的认证信息,OpenID提供者负责做出访问决定(译者注:即登录是否成功)。一旦提供者做出访问决定,它将用户重定向会原始的站点,这是可以确信用户的真实性了。

         如果你开始进行尝试,那OpenID就更容易理解了。让我们添加OpenIDJBCP Pets登录页上。

注册一个OpenID

         为了完全体现本节中这个练习的价值(并测试登录),你需要在众多可用的OpenID中选择一个拥有自己的OpenID,他们的列表可以在这里看到:http://openid.net/get-an-openid/。有些通用的OpenID提供者,你可能已经有它们的账号了如Yahoo!AOL FlickrMySpaceGoogleOpenID支持略有不同,在本章后面的添加Sign In with Google到登录页时,我们将会看到。为了完整的完成本章的练习,我们建议你最少有以下的账号:

l  myOpenID

l  Google

使用Spring Security启用OpenID认证

         在接下来的几章介绍外部认证提供者时,我们将会看到一个通用的模式。关于与Spring系统之外的提供者集成,Spring Security提供了便利的包装。

         在这里,openid4java项目(http://code.google.com/p/openid4java/)为Spring SecurityOpenID功能提供了底层OpenID提供者发现和请求/响应握手(negotiation)的功能。

编写一个OpenID登录表单

         常见的方式是站点在一个登录页上提供了标准(用户名和密码)和OpenID两种登录选择,允许用户在两种方式中选择,JBCP Pets的最终登录页如下:



 基于OpenIDform代码如下:

 

<h1>Or, Log Into Your Account with OpenID</h1>
<p>
  Please use the form below to log into your account with OpenID.
</p>
<form action="j_spring_openid_security_check" method="post">
  <label for="openid_identifier">Login</label>:
  <input id="openid_identifier" name="openid_identifier" size="20" maxlength="100" type="text"/>
  <img src="images/openid.png" alt="OpenID"/>
  <br />
  <input type="submit" value="Login"/>
</form>

 Form域的名字即openid_identifier是有特定含义的。OpenID规范建议使用的站点以这个名字作为OpenID登录域,所以用户客户端(浏览器)对于这个域的功能也具有语义理解。甚至有浏览器插件如Verisign's OpenID SeatBelt (https://pip.verisignlabs.com/seatbelt.do),它能够利用这个语义理解,预先在识别的页面把OpenID凭证填入OpenID域中。

         你可能会意识到在OpenID登录中没有提供remember me选项。这是因为从重定向到提供者再回来,导致remember me复选框的值丢失,所以当用户登录成功后,他们不再有remember me选项。这很遗憾,但是这却增强了我们OpenID登录机制的安全性,因为OpenID强制用户每次登录时都与提供者建立可信任的关系。

Spring Security中配置支持OpenID

         回到基本的OpenID,它包括一个servlet过滤器和认证提供者,只要在dogstore-security.xml文件中的<http>配置元素中添加一个指令即可:

 

<http auto-config="true" ...>
<!-- Omitting content... -->
  <openid-login/>
</http>

 在添加完这个配置元素后并重启应用,你可以重启应用,你能够使用OpenID登录form提供OpenID并会执行OpenID认证流程。但是当你回到JBCP Pets,你会被拒绝访问。这是因为你的凭证并没有任何角色。接下来,我们要处理它。

添加OpenID用户

         因为现在我们还没有使用OpenID的新用户注册,所以需要手动的插入用户账号(测试所用)到数据库中,这是通过添加到test-users-groups-data.sql数据库启动代码中做到的。我们推荐在这一步你使用myOpenID(注意,如果使用Yahoo!会有问题,原因我们下面介绍)。假设我们的OpenIDhttps://jamesgosling.myopenid.com/,那要插入这个文件的SQL如下:

 

insert into users(username, password, enabled, salt) values ('https://jamesgosling.myopenid.com/','unused',true,CAST(RAND()*1000000000 AS varchar));
insert into group_members(group_id, username) select id,'https://jamesgosling.myopenid.com/' from groups where group_name='Administrators';

 你可能会发现这与我们插入传统的基于用户名和密码的admin账号很类似,只是我们使用“unused”作为密码。我们这样做,当然是因为基于OpenID的登录并不需要我们的站点存储用户的密码。但是,细心的读者可能会发现,这并不允许用户创建一个任意的用户名和密码并将其与OpenID关联——我们将会在本章后面简单介绍这个过程,你也可以作为使用这项技术的高级用法,自己探索如何实现。

         此时,你可以完成使用OpenID实现完整登录。重定向的顺序通过以下的截图以箭头的方式进行了描述:



 现在我们有了使用OpenIDJBCP Pets登录!可以测试多个OpenID提供者。你会发现,尽管整体的功能是一样的,但是不同提供者的检查和接受OpenID的体验是不同。

 

 

  • 大小: 43.3 KB
  • 大小: 39.5 KB
  • 大小: 74.9 KB
分享到:
评论

相关推荐

    Spring Security3中文文档

    ### 第一章:Spring Security3入门 该章节分为两个部分,介绍了Spring Security3的基础概念,包括如何设置安全上下文、理解Spring Security的架构以及如何使用Spring Security进行基本的认证和授权。 ### 第二章:...

    spring security3 中文版本

    自此之后,Spring Security 成为了 Spring 生态系统中的一个重要组成部分,不断迭代更新,以适应不断变化的安全需求和技术发展。 ##### 1.3 发行版本号 Spring Security 3.0.1 是在 Spring Security 3.0 的基础上...

    Spring Security in Action

    Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户身份的验证,以确保用户的...

    spring security 官方文档

    Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...

    spring-security 官方文档 中文版

    Spring Security 是一款基于 Spring 框架的安全插件,提供了完整的安全性解决方案,包括身份认证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。Spring Security 的设计目标是为...

    springSecurity3中文文档

    第一章:一个不安全应用的剖析 第二章:springsecurity起步 第三章:增强用户体验 ...第八章:对OpenID开放 第九章:LDAP目录服务 第十章:使用中心认证服务 第十一章:客户端证书认证 第十二章:spring Security扩展

    Spring security oauth源码

    Spring Security OAuth 是一个用于保护RESTful Web服务的框架,它为OAuth 1.0a和OAuth 2.0协议提供了全面的支持。在这个源码中,我们可能会看到如何将Spring Security与OAuth结合,以构建安全的Web应用程序和服务。...

    spring security3.1.3 和 spring security3.0.0

    Spring Security 3.0.0是Spring Security发展的一个关键阶段,引入了大量新特性与改进。此版本加强了对Spring Framework 3.0的支持,带来了更好的可配置性和灵活性。以下是一些核心变化: 1. **表达式式访问控制**...

    spring security reference【洋文】

    Spring Security是一个功能强大且可高度定制的身份验证和访问控制框架,它是保护Java应用程序的事实标准。Spring Security Reference提供了该框架的官方文档,旨在帮助开发人员理解和应用Spring Security来保护他们...

    spring security 3 源代码 不包含书,pets应用

    此外,Spring Security还支持OAuth2和OpenID Connect协议,允许与其他服务进行身份验证和授权的集成。这些特性在企业级应用中非常有用,因为它们可以与其他系统进行安全的数据交换。 总之,Spring Security 3的源...

    spring security 入门demo

    - `spring-security-openid` 文件可能包含了一个OpenID身份验证的示例,这允许用户使用第三方服务(如Google或Yahoo)进行身份验证,增强了用户体验。 5. **X.509证书认证**: - `spring-security-x509` 演示了...

    springsecurity3.1.pdf

    标题:springsecurity3.1.pdf 描述:springsecurity3.1.pdf 标签:spring security3.1 部分内容:SpringSecurity Reference Documentation by Ben Alex and Luke Taylor 3.1.4.RELEASE **一、Spring Security 3.1...

    Spring Security OAuth2集成短信验证码登录以及第三方登录

    在实现集成登录认证组件时,我们需要了解OAuth2.0认证体系、SpringBoot、SpringSecurity以及Spring Cloud等相关知识。同时,我们还需要了解如何定义拦截器、如何在拦截的通知进行预处理、如何在UserDetailService....

    Spring Security 中文教程.pdf

    #### 一、Spring Security简介 - **Spring Security**是一种全面的安全服务框架,主要用于基于J2EE的企业应用程序。它与Spring框架紧密结合,旨在简化安全性的实现,使得开发者能够专注于应用程序的核心逻辑。 - *...

    springsecurity官方文档3.2

    - **OpenID (`spring-security-openid.jar`)**: 支持 OpenID 认证。 #### 2. Spring Security 3.1 中的新特性 - **高层次更新**: 概述了 Spring Security 3.1 中的重要更新,如新的 API、增强功能等。 - **命名...

    Spring Security 把授权信息写入数据库

    在处理与数据库交互方面,Spring Security提供了更强大的支持,包括长期的remember-me功能和基于数据库的角色与用户管理API。 24.2. 目标 在原有应用中,用户信息和资源访问控制已经在数据库中管理。目标是将现有...

    Spring Security学习总结一

    ### Spring Security核心概念与实践详解 #### Spring Security概述 在深入了解Spring Security之前,我们先回顾一下没有Spring Security的权限管理场景。在传统架构中,权限验证逻辑往往与业务逻辑紧密交织,导致...

Global site tag (gtag.js) - Google Analytics