SharePoint OAuth可以让用户使用Token代替用户名和密码来访问站点内容而不需要公开自己的登录凭据。
SharePoint App必须能有特定的客户端ID和客户端Secret,可以使用SharePoint站点管理控制台或者PowerShell来创建并分配给App。每一个App必须关联起码一个客户端ID。
- 打开下面的链接来创建Client ID和Client Secret:
http://{sharepointsite}/_layouts/15/AppRegNew.aspx
举例:
https://sharepoint.local/_layouts/15/AppRegNew.aspx
打开的默认界面
Client ID:这是个GUID。直接点右边的生成Generate按钮可以生成一个。
Client Secret:这是跟Client ID配合的密码,保存的时候需要注意保密。可以直接点右边的生成Generate按钮生成一个。
Title:将显示在App信任屏幕的标题,得取一个用户友好的标题。
App Domain:App远程服务器主机名,注意如果HTTPS不是使用的443端口,需要在域名后带上HTTPS端口号。
Redirect URI:重定向URI,远程App发送ACS身份验证码的端点。
用AppRegNew.aspx创建的Client Secret在创建满一年后会过期。我们可以使用PowerShell更新Client Secret。也可以将这个有效期增长到最大3年。最新更新的Client Secret的生效可能需要24小时,所以更新Client Secret的操作最好在过期前24小时进行。如果Client Secret过期了,App会返回错误“远程服务器返回错误:(401)未经授权。The remote server returned an error: (401) Unauthorized.”。
-
通过下面的链接查看所有的App
https://{sharepointsite}/_layouts/15/AppPrincipals.aspx -
通过下面的链接查看App的详情和分配的权限
https://{sharepointsite}/_layouts/15/Appinv.aspx -
更新Client Secret
import-module MSOnline
Connect-MsolService (provide the tenant administrator username and password)
Store the client id in a variable
$clientId="358658dc-f04b-4c37-a260-2227eb51dde1"
Generate a key with default expiration (one year).
$bytes = New-Object Byte[] 32
$rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rand.GetBytes($bytes)
$rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)
New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret
New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret
New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret
$newClientSecret
Generate the client secret with three years expiration.
Includinh–EndDateparameter parameter on the three calls of the New-MsolServicePrincipalCredential cmdlet
$bytes = New-Object Byte[] 32
$rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rand.GetBytes($bytes)
$rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)
$dtStart = [System.DateTime]::Now
$dtEnd = $dtStart.AddYears(3)
New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart –EndDate $dtEnd
New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret -StartDate $dtStart –EndDate $dtEnd
New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret -StartDate $dtStart –EndDate $dtEnd
$newClientSecret
在app.config/web.config中更新新的Client Secret:
<add key="ClientId" value="your client id here" />
<add key="ClientSecret" value="your new secret here" />
<add key="SecondaryClientSecret" value="your old secret here" />
Thanks to:
达叔傻乐(darwin.zuo@163.com)
网友评论