体验Windows Azure的Access Control Service
我在工作之余写了个和工作内容相关的一个网站,ASP MVC2 + Azure Storage,并且已经部署到了云端。之后有空就修修补补,坚持了一段时间。
然后有了想要给网站加社交功能的想法了,作出的东西总想有用户,有了用户又想有互动。可我一个业余做些小东西的人是不会花时间去开发复杂的功能的。如果自己开发用户系统,需要注册,数据存储,改密码,邮件验证等等,代码量也大。开发出来了用户会买单么?现在网站帐号这么对,谁会想去花时间注册帐号呢?
我想要我的网站能互动社交,但不太想开发用户系统,这是个问题。Windows Azure居然还真有解决方案,真想不到。解决方案是微软提供了登录认证的协议和平台,平台就是Azure的Access Control Service,协议默认支持Facebook,Google,Windows Live,Yahoo!几个大的用户系。有了平台和协议,你只需要配置一下就OK,不需要写代码,然后用户就能使用这些大公司的帐号登录你的Application了。
下面开讲,需要的条件:
有Windows Azure帐号
基于Azure的Web Application
开发环境安装Microsoft Identity Foundation Federation 需要下载安装两个部分: WIF Runtime , WIF SDK
然后就是具体怎么操作了:
首先,我们先配置Windows Azure,先来提供ACS的支持,登录你的Azure,选择Service Bus,Access Control & Caching。
然后选择New创建一个Access Control的Namespace,一个帐号可以建多个,只要你有$就行,接下来会看到这个界面:
Namespace很重要,决定了这个网址http://****.accesscontrol.windows.net ,用来做帐号登录认证过程中会出现这个网址的。创建号之后选中新创建的项目点这个按钮:
然后进入配置阶段,首先进入是这个页面:
过目吧,这个页面没什么信息,仅仅看看一些操作条目吧。我们今天只能用到前面三个:
添加用户帐号的Provider,向导式的,很简单的:
只有Facebook的向导稍微复杂了一点,不但这里要设置,你还要去facebook申请个Developer App才可以。然后把AppId和AppSecret填在向导里面。另外facebook Developer那边的App的URL必须填成上面写的http://***.AccessControl.windows.net/
添加好Provider就可以配置Application了,需要新建Relying Party Application,这个表也比较简单。
五个地方需要注意,Name:你的App的名字,Realm:App的网址,例如http://***.cloudapp.net , ReturnURL:http://***.cloudapp.net/Account/SignIn 。
Providers就选上你接受的帐号类型,RuleGroup就选默认的Create New Rule Group。还有很多参数都保持默认。
小技巧,你的App可以添加多次,方便开发和实际部署,我的方案:
AppName Dev: http://127.0.0.1:81/Account/SignIn
AppName Production: http://***.cloudapp.net/Account/SignIn
这样开发部署都没有问题。
然后最后一步需要配置RuleGroup,不同的Provider帐号登录后给你返回的信息不同,你可以在这里做个过滤之类的。
上面就是个Name,没什么有用的信息,下面是登录之后返回的信息,Google和Facebook都返回email, Name, Identifier。Facebook额外返回了几个属性,Windows Live信息最少,连Email和Name都没有,只有Identifier。
到此,Azure这边的配置就完了。
然后转战程序员这边了,下载ACS2 Simples ,解压\ACS\Websites\MVC3CustomSignInPage 这个Web工程。打开这个Web工程之后右键工程文件,"Add STS Reference"就会打开一个向导,前提是你装了WIF Runtime及WIF SDK。
第一个不用填,第二个可以填Production环境,也可填开发环境。下一步
下面有个Example,直接替换域名部分为***.accesscontrol.windows.net就可以了,这个就是Azure ACS配好的那部分。接下来一路Next。
然后调试,或者直接部署,都可以的,有个问题是怎么在调试和部署之间切换啊。你的Web.Config有这么两段
\microsoft.identityModel\service\audienceUris\add [Value属性]
\microsoft.identityModel\service\federatedAuthentication\wsFederation [realm属性]
把这两个属性改成你的Site的URL就可以了,Debug写127.0.0.1,部署时候写实际值。
给个例子好了 http://scommp.cloudapp.net