细说SSO单点登录

什么是SSO?

如果你已知道,请略过本节!

SSO核心意义就一句话:一处登录,处处登录;一处注销,处处注销。即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

很多人容易把SSO与OAuth搞混。这里简单说明一下:

OAuth也可简单总结为一句:基于各种懒和YY的原因,拿别人的登录系统来用。

至于官方说的,是一种授权协议,为网站用户授权第三方应用访问自己在网站…(此处省略N多字)可自行百度。

 

SSO实现

SSO的实现方式虽然有很多种,但大的框架不会脱离下图结构的:

即所有的登录验证,登录状态存储都在SSO授权中心处理(图中的www.sso.com),其他站点或者使用浏览器跳转(Response.Redirect)或者使用服务器端http post来与SSO授权中心进行通信验证。下面是百度里比较知名的几种实现方式,我会介绍一下他们的优缺点,并提出自己最终的解决方案!

 

实现方式一:强大的Cookie + Response.Redirect

从感情上来说,这是我最喜欢的一种方式,如果不是我后面提到的几个致命的缺点,我想我这辈子都只会用它了。CodeProject上ASP.NET版块2010 年9月份最佳文章:Single Sign On (SSO) for cross-domain ASP.NET applications 对这种方式给出了完美的说明,并给出了一个可运行的实例!有兴趣的同学可以读一下原文,非常有意思。我这里说一下它的核心思想!

先看看登录:

 

再看看,如果我想访问一个XX列表页面,流程是这样的:

这种方式看似流程复杂,实际代码实现起来非常简单。domain1.com/domain2.com等站点不用做任何cookie,session等操作,只需要在后台把认证相关的操作全部Redirect给sso.com,然后等着SSO处理完结果Redirect回来即可。具体代码实现可以参考这位大神的第二篇文章:Single Sign On (SSO) for cross-domain ASP.NET applications: Part-II - The implementation 

这种方式原理和代码很简单,但缺点也是非常明显的:

  1. 不支持ajax登录验证方式,因为ajax处理后台Redirect相当复杂,这是该方式的致命缺点;

  2. 这能在相同的浏览器里实现单点登录,因为客户端网站没带任何状态信息,只能借用sso.com的cookie判断,不过这个缺点可以用URL带参数,用缓存代替cookie等解决;

实现方式二:HttpClient后台提交

这种方式的典型实现,是以前园子里一个哥们写的smartSSO:http://www.cnblogs.com/smartbooks/p/3800849.html 

同上,他的实现核心也可以简化为两幅图。

登录时的情况:

访问一个XX列表页面的情况:

这种实现完全把与sso.com的交互放在了domain1.com/domain2.com后台,通过httpclient post的方式。对于前端普通用户,完全感觉不到sso.com的存在。

从流程图上看,你可能觉得实现起来比第一种方式要简单,但实际情况恰恰相反。因为你不但要在sso.com上做状态存储,还要在domain1.com等客户站点做状态判断并跳转。

该smartSSO只做了类似三方登录的功能,并没有提供客户站点直接登录的接口。

OpenAuth.Net的实现方式

OpenAuth.Net(项目简介及地址:http://www.cnblogs.com/yubaolee/p/OpenAuth.html )v1.2版综合了以上两种方式的优点,实现了更为优雅实用的SSO功能。

特点:

  1. 当使用普通跳转时使用Redirect快速验证;

  2. 当又Ajax时使用后台Post方式;

  3. 如果客户站点不想做登录,SSO占站点自带登录界面,可以完全把登录授权等逻辑交给SSO处理;

  4. 真正的一处登录,处处登录,一处注销,处处注销;

 

项目地址:https://git.oschina.net/yubaolee/OpenAuth.Net

原文地址:http://www.cnblogs.com/yubaolee/p/sso.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现字符逆序输出

package cn.jbit.array;import java.util.Arrays;public class CharsSort {/*** 字符逆序输出*/public static void main(String[] args) {char[] chars new char[]{a,c,u,b,e,p,f,z};System.out.print("原字符序列&#xff1a;");for(int i 0; i < chars.lengt…

html5页面转场,基于HTML5 SVG的页面过渡切换效果

示例中使用了CSS Flexbox和CSS变量&#xff0c;不是所有的浏览器都支持这些新的CSS属性。该HTML5 SVG的页面过渡变形切换效果的基本HTML结构如下&#xff1a;d"M -44,-50 C -52.71,28.52 15.86,8.186 184,14.69 383.3,22.39 462.5,12.58 638,14 835.5,15.6 987,6.4 1194,1…

JVM调优总结(4):分代垃圾回收

转载自 JVM调优总结&#xff08;4&#xff09;&#xff1a;分代垃圾回收为什么要分代 分代的垃圾回收策略&#xff0c;是基于这样一个事实&#xff1a;不同的对象的生命周期是不一样的。因此&#xff0c;不同生命周期的对象可以采取不同的收集方式&#xff0c;以便提高回收效…

.NET Core系列 : 2 、project.json 这葫芦里卖的什么药

.NET Core系列 &#xff1a; 1、.NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境&#xff0c;本文介绍.NET Core中最重要的一个配置文件project.json的相关内容。我们可以使用.NET Core 的dotnet 命令行接口&#xff08;CLI&#xff09;dotnet new命令创建一个应用&…

html5 地图效果,html5 echarts图表插件炫光的分布地图动画特效

特效描述&#xff1a;图表插件 炫光的动画 分布地图动画 动画特效。html5地图动画&#xff0c;html5 echarts图表插件代码结构1. 引入JS2. HTML代码&#xfeff;ECharts$(#document).ready(function(){getEcharts();});function getEcharts(){// Step:3 conifg EChartss path, …

ASP.NET MVC @helper使用说明

简单的 helper 方法应用场景 Razor中的helper语法让您能够轻松创建可重用的方法&#xff0c;此方法可以在您的视图模板中封装输出功能。他们使代码能更好地重用&#xff0c;也使代码更具有可读性。 在我们定义helper方法之前的代码 让我们看一个简单的产品列表应用场景。在此场…

java实现向有序数组中插入一个元素

package cn.jbit.array; import java.util.*;public class Insert {public static void main(String[] args) {//字符排序char[] chars new char[9];chars[0] a;chars[1] c;chars[2] u;chars[3] b;chars[4] e;chars[5] p;chars[6] f;chars[7] z;System.out.print(&quo…

JVM调优总结(5):典型配置

转载自 JVM调优总结&#xff08;5&#xff09;&#xff1a;典型配置以下配置主要针对分代垃圾回收算法而言。 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的…

html点击弹出iframe,JavaScript:关于跨iframe弹窗

index.htmliframe.html$(function(){$("#window").window({width: 200,height: 100});});效果由于是在iframe中弹窗致使窗口被腰斩&#xff0c;所以需要向window中追加节点再弹窗&#xff0c;解决方式如下var win window.top.document.createElement("div"…

Visual Studio “15”第三个预览版发布

微软发布了Visual Studio 2015后继版本Visual Studio “15” (VS15)的第三个预览版本。目前为止&#xff0c;VS15延续了开发过程的迭代特性&#xff0c;升级了IDE的功能&#xff0c;提供了用户可以修改的C#格式规则以及一个新的异常辅助程序。 经过修改的智能提示弹出框包含了一…

计算一个班的平均分

package cn.jbit.nestedloops; import java.util.Scanner; /*** 计算一个班的平均分*/ public class AvgScore {public static void main(String args[]){int[] score new int[4]; //成绩数组float sum 0.0f; //成绩总和float average 0.0f; //成绩平均值//循环输入学…

IronPython死而复生

IronPython是一个运行在.Net框架通用语言运行库上的实现&#xff08;Common Language Runtime&#xff0c;CLR&#xff09;。这个项目曾一度停滞不前&#xff0c;最近&#xff0c;团队换了领导者&#xff0c;带来了新的进展。 Jeff Hardy&#xff0c;IronPython项目的前领导人&…

阳泉2021高考成绩查询时间段,2021年阳泉高考成绩排名及成绩公布时间什么时候出来...

阳泉高考结束后&#xff0c;每年都有很多家长和考试不知道阳泉高考成绩排名如何查询、阳泉高考成绩什么时候公布以及查询方式&#xff0c;本文小编整理了阳泉高考成绩查询排名的相关知识。一、阳泉高考成绩公布时间及查询方式根据往年阳泉高考成绩公布时间预测&#xff0c;2021…

深入JVM——OOM异常解析

转载自 深入JVM——OOM异常解析JVM对象访问解析 对象访问过程的内存情况 public void function(){Object obj &#xff1d; new Object(); }?function方法被执行的时候&#xff0c;JVM在JVM栈中为function创建一个栈帧&#xff0c;用于存放function在运行过程中的一些信息。O…

mvc html.antiforgerytoken,MVC Html.AntiForgeryToken() 防止CSRF***

MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)***的一个措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),***不同,XSS一般是利用站内信任的用户在网站内插入恶意的脚本代码进行***&#xff0c;而CSRF则是伪造成受信任用户对网站进行***…

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步

一、安装Visual Studio Code 安装文件下载地址&#xff1a;VS Code&#xff0c;当前最新版本是1.3。 推荐安装最新版&#xff0c;因为附带Debug插件&#xff0c;支持在vs code上进行断点调试。 二、安装.Net Core 1.0 SDK 安装文件下载地址&#xff1a;.Net Core SDK 三、创建一…

计算机应用基础期中上机考试,期中考试计算机应用基础试卷

中职17计算机1期中考试计算机应用基础试卷一、选择题1.在Excel2010工作簿中,至少应含有的工作表个数是()。A.0B.1C.2D.32.在Excel2010公式中,地址引用E$6是()A.引用绝对地址B.相对地址C.混合地址D.都不是3.在Excel2010默认建立的工作簿中,用户对工作表()。A.可以增加或删除B.不…

java实现打印直角三角形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印直角三角形*/ public class RTriAngle {public static void main(String[] args) {int rows 0; //三角形行数System.out.print("请输入直角三角形的行数&#xff1a;");Scanner input ne…

ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)

前言 在上篇文章中《ASP.NET Core Docker部署》中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序&#xff0c;本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程&#xff0c;来保证我们的程序在异常或者是电脑重启的时候仍然能够…

测试OOM异常

转载自 测试OOM异常一、Java堆溢出内存溢出和内存泄露内存溢出&#xff1a;指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后&#xff0c;仍然无内存空间容纳新的Java对象的情况。内存泄露&#xff1a;指程序中动态分配内…