本文主要是介绍saml2.0 java 例子_SAML2.0 协议初识(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、什么是 SAML 协议?
SAML 即安全断言标记语言,英文全称是 Security Assertion Markup Language。它是一个基于 XML 的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在 SAML 标准定义了身份提供者 (identity provider) 和服务提供者 (service provider),这两者构成了前面所说的不同的安全域。 SAML 是 OASIS 组织安全服务技术委员会(Security Services Technical Committee) 的产品。
SAML(Security Assertion Markup Language)是一个 XML 框架,也就是一组协议,可以用来传输安全声明。比如,两台远程机器之间要通讯,为了保证安全,我们可以采用加密等措施,也可以采用 SAML 来传输,传输的数据以 XML 形式,符合 SAML 规范,这样我们就可以不要求两台机器采用什么样的系统,只要求能理解 SAML 规范即可,显然比传统的方式更好。SAML 规范是一组 Schema 定义。
可以这么说,在 Web Service 领域,schema 就是规范,在 Java 领域,API 就是规范。
二、SAML 协议的作用
认证声明:声明用户是否已经认证,通常用于单点登录。
属性声明:声明某个 Subject 所具有的属性。
授权决策声明:声明某个资源的权限,即一个用户在资源 R 上具有给定的 E 权限而能够执行 A 操作。
三、SAML 相关定义
SP(Service Provider): 向用户提供正式商业服务的实体,通常需要认证一个用户的身份;
IDP(Identity Provider): 提供用户的身份鉴别,确保用户是其所声明的身份
断言 (Assertions) 即信息:断言是在 SAML 中用来描述认证的对象,其中包括一个用户在什么时间、以什么方式被认证,同时还可以包括一些扩展信息,比如用户的 Email 地址和电话等等。下面是一个断言的例子:
1 <?xml version="1.0"?>
2
3 http://idp.example.com/metadata.php
4
5 xiaosy@bw30.com
6
7
8
9
10
11
12 http://sp.example.com/demo1/metadata.php
13
14
15
16
17 urn:oasis:names:tc:SAML:2.0:ac:classes:Password
18
19
20
21
22 test
23
24
25 test@example.com
26
27
28 users
29 examplerole1
30
31
32
协议 (Protocol) 即通信:协议规定如何执行不同的行为。这些行为被细化成一些列的 Request 和 Response 对象,而在这些请求和相应的对象中包含了行为所特别需要的信息。比如,认证请求协议(AuthnRequest Protocol)就规定了一个 SP 如何请求去获得一个被认证的与用户。
这是一个 AuthnRequest 对象示例:
1 <?xml version="1.0"?>
2
3 http://sp.example.com/demo1/metadata.php
4
绑定 (Binding) 即传输:绑定定义了 SAML 信息如何使用通信协议被传输的。比如,HTTP 重定向绑定,即声明 SAML 信息将通过 HTTP 重定向消息传输;再比如 SAML SOAP 绑定,声明了通过 SOAP 来传递 SAML 消息。比如上面 AuthnRequest 就声明了 Http-POst 绑定
元数据 (MetaData):SAML 的元数据是配置数据,其包含关于 SAML 通信各方的信息,比如通信另一方的 ID、Web Service 的 IP 地址、所支持的绑定类型以及通信中实用的密钥等等。
四、SAML 协议流程分析:
SAML 协议内容比较复杂,绑定方式不只一个,在这里我们以应该算是最简单的一种绑定方式 HTTP-POST 方式说明 SAML 协议的工作流程(好吧,其实是其他的还没有了解呢
)
1、用户通过浏览器访问 SP 的某个受保护的资源
2、SP 鉴别到该用户未鉴权,于是将该用户重定向到 IDP 端;前提是改 IDP 是受 SP 信任的身份认证中心;
3、IDP 端通过自己的认证方式对该用户合法性进行认证;
4、认证通过后,IDP 端生成响应后返回给 SP
5、SP 接收到 IDP 的响应后解析出用户认证信息,合法,则允许用户访问受保护的资源
接下来,我将分别从 SP 端和 IDP 端对一些常用的参数进行介绍,并且最后给出一个简单的 demo, 敬请期待
这篇关于saml2.0 java 例子_SAML2.0 协议初识(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!