Share via


如何使用Live ID、Facebook账号或者Google ID来进行SharePoint 2013本地站点身份认证

在很多的咨询问题中,站点的身份认证问题占据了很大的比例,我们知道SharePoint 2013 中的Web应用程序支持三种基于申明的认证方式,

  1. Windows 申明认证
  2. 基于表单的申明认证
  3. 基于信任的外部申明认证

这三种认证方式推荐使用在不同的应用场景中,比如只提供企业内部访问的Web应用程序,我们就可以采用最简单的Windows 申明认证方式。有一些站点是提供给特定企业外部人员来访问的,如供应商、外包人员的那么我们就可以使用基于表单的认证模式,因为管理方知道需要访问人员的具体名单,但是又不必要在企业内部域中添加这些用户。

还有一种站点我们是设定对公众开放的站点,一般我们可以通过开放匿名访问用户的方式来实现,但是我们想适当的提高一些访问的权限门槛,比如用一个通用的微软账号,一个Google账号来登陆站点,可以实现吗?

答案是可以的,而接下来我也将会在这篇博客中一步一步实现这个配置。

在做配置之前我们需要确认一些前提条件:

  1. Microsoft Azure ACS (Access Control Service)
  2. 一个完成基本配置的SharePoint 2013本地服务器场环境(能访问外网)
  3. 一个能登陆Facebook开发者界面的Facebook账号

步骤一:配置Azure ACS

在以前不配置Azure ACS,也同样可以把Google ID或是Facebook做为身份认证颁发机构直接添加到SharePoint站点认证方式中,但是那样的话我们需要多次配置,也不利于后期管理,现在有了Azure ACS这个免费的服务,而ACS本省已经整合了一些支持Oath 2.0的身份认证源,所以一次整合完成后,后期ACS添加更多的认证源进来,我们也不需要再去修改SharePoint中的设定了,只需要简单维护ACS即可。

所以我们还是先来介绍一下什么是ACS,没找到中文的官方描述,所以还是直接看英文的定义吧:

Microsoft Azure Active Directory Access Control (also known as Access Control Service or ACS) is a cloud-based service that provides an easy way of authenticating and authorizing users to gain access to your web applications and services while allowing the features of authentication and authorization to be factored out of your code. Instead of implementing an authentication system with user accounts that are specific to your application, you can let ACS orchestrate the authentication and much of the authorization of your users. ACS integrates with standards-based identity providers, including enterprise directories such as Active Directory, and web identities such as Windows Live ID (Microsoft account), Google, Yahoo!, and Facebook.

通过上面的英文描述,我们简单理解就是ACS是一个云服务,你可以把它理解为一个身份认证的中间人,但是它本身也是可是一个可以颁发身份认证的服务机构。

首先让我们登陆Windows Azure站点

 

新建一个ACS的命名空间

 

等待新的ACS服务创建完成后,选择这个新的ACS服务,然后点击下方的Manage按钮

 

进入一个新的管理界面后,如果您对于本地的ADFS配置比较熟悉的话,您会觉得能配置与管理的选项是多么的类似。

 

我们需要在这个管理中心中进行如下的4部分配置。

添加身份提供源( Identity Providers

配置依赖方应用程序( Relying party applications

配置验证规则( Rule Groups

配置证书与密钥( Certificates and keys

  1. 添加身份提供源( Identity Providers

因为是微软自家的产品,所以默认Windows Live ID就已经是身份提供源了,现在来我们添加Facebook

点击屏幕中的Add 按钮

 

选择FaceBook ,并点击Next

 

我们需要填入一些信息来在ACS中定义这个新的身份提供源。

 

这些信息需要在Facebook的开发者页面中才能获得

首先需要激活你Facebook账号的开发者权限,然后登陆开发者页面

 

点击My Apps, Add a New App

然后选择网站应用程序

 

稍等后我们就获得了ACS需要的App ID和 App Secret

把这些信息填回到ACS配置中

 

单击保存,我们就完成了Facebook身份提供源的设定

 

接下来,我们去创建一个Relying Party Applications

里面有很多信息需要填,我们逐一来看

 

Name :自定义一个Application的名字

Mode :默认

Realm :输入需要做身份认证的SharePoint 站点地址( https://portal.zeyusoft.info/

Return URL: 在上面的URL后面加上返回路径( https://portal.zeyusoft.info/_trust

Token format :选择SAML 1.1

Token lifetime: 3600

然后点击保存

新建一个Rule Group

默认选择所有的Rule

 

最后我们需要一张证书,这个证书的目的是提供这个命名空间的安全认证,自签名证书即可, https://zeyusoft.accesscontrol.windows.net

或者这个域名的自签名证书方法很多,我就不逐一介绍,比如用微软提供的MakeCert.exe来创建。

这里我介绍一种更加简单的方式,登陆如下站点:

https://www.selfsignedcertificate.com/

直接输入想要的自签名证书域名,点击生成,完成啦 ~

 

 

 

在获得自签名证书后,你需要把这个证书进行一个转换,获得一份包含密码信息的 .pfx文件

至于如何把一个Crt文件转换为PFX格式,我就不在这展开说明了。

我们回到ACS的配置页面中,导入这张证书,并输入证书密码

导入成功后,你会在屏幕中央看到目前导入的证书指纹

 

至此,我们完成了ACS端的全部设定,一个ACS身份认证源创建好了,它后端链接了Live ID和Facebook身份管理源,接下去就是创建SharePoint 和ACS之间S2S 信任了。

以下配置都没有UI界面来操作,都需要在本地的SharePoint Server端,通过Powershell 来实现。

加粗部分需要根据你自己的情况调整,请注意把刚才获得的ACS证书保存到SharePoint本地服务器中

其他部分代码,不需要做任何的修改

Add-PSSnapin Microsoft.SharePoint.PowerShell
#Realm we created in Azure
$realm = "https://portal.zeyusoft.info/"

#Replace " https://zeyusoft.accesscontrol.windows.net " and "portal.zeyusoft.info " with yours here!
$signinurl = "https://zeyusoft.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=https%3a%2f%2fportal.zeyusoft.info%2f"

#Location of the certificate generated with Makecert.exe
$certloc = "C:\acs\acs.cer"
$rootcert = Get-PfxCertificate $certloc
New-SPTrustedRootAuthority "Windows Azure ACS" -Certificate $rootcert

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certloc)

#Map the Fields from Rules Created for All Providers: Facebook , Google & Live ID
# NameIdentifier Field
$NameIdentifier = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier " -IncomingClaimTypeDisplayName "UPN" -LocalClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn "
# Email Field
$Email = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress " -IncomingClaimTypeDisplayName "Email" -SameAsIncoming
#Given Name Field
$GivenName = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name " -IncomingClaimTypeDisplayName "Display Name" –LocalClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname "
$AccessToken = New-SPClaimTypeMapping -IncomingClaimType "https://www.facebook.com/claims/AccessToken " -IncomingClaimTypeDisplayName "Access Token" -SameAsIncoming
$Expiration = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.microsoft.com/ws/2008/06/identity/claims/expiration " -IncomingClaimTypeDisplayName "Expiration" -SameAsIncoming

#Create New Trusted Identity Provider
New-SPTrustedIdentityTokenIssuer -Name "Live ID/Google/Facebook" -Description "Live ID/Google/Facebook" -Realm $realm -ImportTrustCertificate $cert -ClaimsMappings $NameIdentifier, $Email, $GivenName, $AccessToken, $Expiration -SignInUrl $signinurl -IdentifierClaim "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier "

如果正常的话,不会有报错信息出现

 

以上代码虽然看起来非常多,其实实质就是通过New-SPTrustedIdentityTokenIssuer这个指令在本地SharePoint场中创建一个新的被信任认证颁发机构。

如果运行上面的代码没有出现红字的话,那么离成功不远了,

接下去就是回到中央管理界面,把这个新的身份源添加到既有的Web App中

你会发现现在在Trusted Identity Provider 下面多了一个选择,就是我们刚才添加的新的源

勾选,并保存。

 

当用户通过身份认证后,我们还需要给这些访客开放相应的SharePoint站点权限。

 

接下去,我们就能验证之前配置的结果了。

登陆https://Portal.Zeyusoft.info

SharePoint已经默认帮我们做好了一个具备下拉菜单的登陆选择界面,因为这个Web App包含了两种认证方式。

 

现在你就能选择Facebook来作为身份认证源了

 

点击图标后会自动跳转到Facebook验证界面

 

Microsoft China Partner Team