MOSS群2008年1月3号技术讲座:kaneboy关于如何在SharePoint中集成Live ID认证

ShuGuang 说:
“如何在SharePoint中集成Live ID认证”
ShuGuang 说:
这个主题涉及到两个方面,1、SharePoint的membership provider机制,2、Live ID
ShuGuang 说:
先简单的讲一下live id
ShuGuang 说:
live id就是以前的.net passport
ShuGuang 说:
任何第三方网站可以使用live id来作为自己的认证体系,live id也提供了简单好用的接口
ShuGuang 说:
首先,需要在live上为自己的网站注册一下
ShuGuang 说:
https://msm.live.com/app
ShuGuang 说:
在这里,需要提供几项信息:application名称,通过live id认证后转向到哪个url
ShuGuang 说:
注册完成后,需要知道两个信息:application id和secret key(自己指定),application id是一串字符,比如,wiki.msotec.net注册后的application id就是“00163FFF80006065”
ShuGuang 说:
然后,在自己的网站上显示一个指向live的登录链接,在链接url后面要加上application id的query string
ShuGuang 说:
我这里讲的是原理,具体步骤和方法可以参考live id sdk
ShuGuang 说:
用户点击登录后,会被导到live id的登录page,在这个page上使用自己的live id进行登录
ShuGuang 说:
然后,live会向我们指定的一个url进行一个post的动作,post的数据中包含了多项信息,但最主要,就是这个live id帐号的一个唯一id号
ShuGuang 说:
每个live帐号在每个application都有一个唯一的用户id
ShuGuang 说:
live登录后,只会将这个唯一的id告诉我们的网站
ShuGuang 说:
也就是说,用户在live登录后,我们的网站实际上不能知道这个用户的任何信息,包括他的live帐号、邮件地址...只有一个id号(一串字符)
ShuGuang 说:
这样的设计,也是为了保护用户的隐私
ShuGuang 说:
我们的网站拿到这个用户id号之后,再根据自己的需求,进行处理。
ShuGuang 说:
live id就是这么回事了
骆建峰 说:
Live ID 這個服務是要收費的嗎?
西安㊣UnName 说:
有配额限制吗
大连㊣银烨妖瞳 说:
应该不会吧
ShuGuang 说:
千万要注意的是,得到的这个用户id,只是一串字符,既不是用户的邮件(Live帐号),也不是他的名字。我们不能从这个用户id推导出任何用户的个人信息
ShuGuang 说:
free
ShuGuang 说:
no limit

ShuGuang 说:
OK,介绍完live id,我再讲sharepoint这边。最后会再具体介绍wiki.msotec.net上是如何把live id和sharepoint的用户系统进行整合的

ShuGuang 说:
一个要注意的是:“认证”和“授权”是两回事,不要混为一谈!
ShuGuang 说:
认证:就是确认一个访问者是不是某人,通常需要这个访问者提供用户名、密码,或者其他方式(比如使用live id)
ShuGuang 说:
认证只能确认这件事:那个号称自己是十一的访问者,确实是十一本人
ShuGuang 说:
AD就是用于认证的
ShuGuang 说:
授权:确认某个用户在我们的系统里面有什么样的权限,能做什么,不能做什么
ShuGuang 说:
sharepoint的授权系统是自己管理的,我们通常通过“网站设置”进入到的权限管理里面,都是“授权”这一块的内容
ShuGuang 说:
而认证这一块,sharepoint使用了membership provider,这个asp.net 2.0的模块,以提供强大的扩展性
ShuGuang 说:
也就是,从某种意义上来说,sharepoint本身并不管认证,而直管授权。sharepoint默认使用了ActiveDirectoryMembershipProvider,这个.Net 2.0内置的membership模块,来进行认证。也就是,默认使用AD集成认证
ShuGuang 说:
这个认证模块会验证页面访问者是什么人,然后把这个人的用户名告诉sharepoint,sharepoint然后进行授权检验,也就是看这个用户名在当前网站上是否有什么权限
ShuGuang 说:
.net 2.0内置了两个,这是其一,另外一个好像是使用SQL的那个
ShuGuang 说:
我继续。membership provider是可以由开发人员自己开发的
ShuGuang 说:
简单来说,我们自己写的membership provider要做这样的事情:验证一个访问者是否是某个用户
ShuGuang 说:
同时,membership provider还将用户的用户名这个信息返回给sharepoint
ShuGuang 说:
更严格的说,membership provider将用户名以这样的格式返回给sharepoint:“provider名:用户名”

ShuGuang 说:
这样,sharepoint就知道当前访问者是谁了
ShuGuang 说:
但是,这个访问者如果被sharepoint认为对当前网站没有访问权限,那也访问不了网站页面
ShuGuang 说:
在sharepoint管理中心,可以直接指定一个web application的membership provider是什么
ShuGuang 说:
当然,还需要将定制的membership provider在web.config里面注册。注册的方法和asp.net 2.0一模一样

ShuGuang 说:
OK,最后,来介绍一下wiki.msotec.net是怎么做的。源码大家可以下载到,可以对照看看
ShuGuang 说:
首先,我使用一个list,来保存有权限访问站点的用户的列表,这个list里面,最主要就是要保存从live id返回的那个用户id
ShuGuang 说:
然后,有一个定制的membership provider,LiveIDMembershipProvider类,wiki.msotec.net的认证由它负责
ShuGuang 说:
同时,源码里面还有一个web app项目,里面有几个页面,login.aspx之类,用来显示一个定制的页面给未登录用户,当然还有其他的事情
ShuGuang 说:
OK,现在是流程:首先,当用户点击站点的“登录”链接的时候,自动跳转到我写的login.aspx页面。这个行为是靠修改web.config里面的“<forms>”节点来实现的
ShuGuang 说:
比如:“<forms loginUrl='/_layouts/LiveIDPages/login.aspx' />”
上海㊣NEO 说:
这个更改对所有的站点都有效吗?
ShuGuang 说:
这个页面其实特别简单,就显示一个链接,指向live的真正登录页面,用户使用这个链接,跳转到live的登录页面
ShuGuang 说:
web.config对一个web application(可能包含一个或多个site collection)生效
huGuang 说:
访问者就在live的登录页面上,进行登录,登录完成以后,live将这个用户的唯一id号post给我指定的一个页面,这个页面在wiki.msotec.net里面,是“/_layouts/LiveIDPages/LiveIDAuthHandler.aspx”
ShuGuang 说:
这个用户唯一id号的格式类似“3721dd8ay7sdklaufhwq”...
ShuGuang 说:
LiveIDAuthHandler.aspx的page_load里面,分析一下request.Forms里面的数据,就得到了这个用户的唯一id
ShuGuang 说:
然后,在LiveIDAuthHandler.aspx里面,我调用了LiveIDMembershipProvider.ValidateUser()方法,这个方法里面的代码访问那个存放了站点用户数据的list,根据这个用户唯一id,看看是不是存在这样一个list item
ShuGuang 说:
如果存在,那么就读取这个list item的数据,这个list包含了其他的field,用来保存用户的“昵称”,然后把这个用户的昵称信息返回给LiveIDAuthHandler.aspx
ShuGuang 说:
LiveIDAuthHandler.aspx从LiveIDMembershipProvider.ValidateUser()得到肯定的信息之后,就确认,OK,这个用户是谁谁谁,他是我这个网站的用户,于是,调用asp.net forms认证的相关方法,写一个user token cookie,有了这个cookie,系统就会知道当前用户是谁,以及他已经通过了认证

ShuGuang 说:
如果LiveIDMembershipProvider.ValidateUser()发现这个用户从live返回的唯一id在那个用户list里面找不到,那么就返回false,LiveIDAuthHandler.aspx就会弹一个alert,说,好吧,你通过了Live认证,但是你不是我这个网站的用户,请你注册一下,然后,转向到RegisterPendingMember.aspx页面

ShuGuang 说:
RegisterPendingMember.aspx显示一个textbox,让用户填写,用户填写了,就会向保存用户信息的list写一个新的list item进去,当然,内容审批状态是待定。用户在这个页面上需要填写两项信息,昵称,和邮件地址
 umboy 说:
本地都保存用户的什么信息?
ShuGuang 说:
那个list里面主要就记录这个用户的live唯一id、昵称、邮件地址

ShuGuang 说:
管理员可以在那个保存用户信息的list里面审批通过这个用户,这样,下次用户登录的时候,就能够通过认证了
ShuGuang 说:
LiveIDMembershipProvider提供给sharepoint的用户名实际上是用户自己填写的昵称,而不是那个live唯一id
ShuGuang 说:
所以,用户登录后,在右上角会显示,“欢迎 [用户自己填写的昵称]”,因为sharepoint认为这个昵称就是用户名
ShuGuang 说:
sharepoint里面的SPUser.Loginname就等于这个用户昵称了。
 umboy 说:
有重名的可能了吧?
ShuGuang 说:
那个list,必须保证live id是唯一的,用户昵称也是唯一的
ShuGuang 说:
因为这个用户昵称要提供给sharepoint做用户名的
ShuGuang 说:
在LiveIDMembershipProvider.CreateUser()里面,大家可以看看那个代码
ShuGuang 说:
sharepoint接收到这个用户名之后,实际上会自己再存储到content db里面,这个用户就成为sharepoint站点用户了

ShuGuang 说:
站点管理员还需要在sharepoint的站点管理里面,授权这个用户有相应的权限
ShuGuang 说:
当管理员sharepoint的那个用户输入控件里面输入用户名,然后点击右方的那个用户验证按钮,sharepoint还是会调用LiveIDMembershipProvider里面的方法,来进行用户名验证
ShuGuang 说:
sharepoint还是会调用LiveIDMembershipProvider里面的方法,来进行用户名验证,以确认确实有这个用户存在

ShuGuang 说:
这个方法,还有一个问题,MOSS中有User Profile这个东东,由于我们使用了定制的membership provider,所以这些用户信息不会被自动导入到User Profile里面

ShuGuang 说:
sharepoint可以搜索用户,但是前提就是,这个用户要在User Profile里面有信息。
ShuGuang 说:
解决方法是可以自己写一个程序(Timer Job最好),定时将那个存放用户的List里面的用户信息导入到User Profile中

ShuGuang 说:
介绍完了。大家提问吧

ShuGuang 说:
源码下载:http://wiki.msotec.net/Documents/LiveIDSecurities.zip
ShuGuang 说:
Live ID SDK:http://msdn2.microsoft.com/en-us/library/bb404787.aspx

问题:

 umboy 说:
我问第一个问题:MOSS与RMS集成时,必须用AD验证才能实现对OFFCIE文档权限细粒度的控制?那么我们是否可以用LIVE ID做验证来实现呢?
这样就可以在非域环境里实现文档权限控制了。

ShuGuang 说:
sharepoint里面内置的那个IRM Protector,应该不能处理使用Live ID验证的场景。虽然理论上,我们可以通过写一个定制的IRM Protector来实现
 umboy 说:
 写IRM Protector的过程看http://msdn2.microsoft.com/en-us/library/ms439253.aspx 

关于RMS技术探讨,QQ群:24893581

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值