如何通过AzureAD平台提供的授权方式访问sharepoint online

官方文档:

1.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645543(v=azure.100)?redirectedfrom=MSDN

2.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645545%28v%3dazure.100%29

AzureAD的简单介绍:Azure Active Directory(Azure AD)使用OAuth 2.0使您能够授权对Azure AD租户中的Web应用程序和Web API的访问。 OAuth 2.0的Azure AD实施符合OAuth 2.0 RFC 6749,并已扩展为保护第三方Web API。此设计使您可以将AAD用作开发的Web应用程序和Web API的完整安全平台。

上个本篇要用到的图:

 

 

在开始之前需要拥有一个AzureAD,我申请的是Office365的开发者账号,其中包括Sharepoint online和AzureAD的订阅。在AzureAD上注册一个客户端app,按上文提到的我们通过这个app来访问SharePoint online。

1.首先我们进入AzureAD注册一个app

 

2.填入name,选择app的访问账户类型和app类型。我们用户选择第三种,app选择web ,以及一个访问时返回的url。

 

 

 

 3.这是创建之后的app基础信息(很重要的信息)。

 

 

 通过上面的步骤,我们成功注册了一个应用程序。

之后我们通过使用用户名密码或者用户名证书这两种方式来获取Token。

1.在上面步骤我们只是申请了一个app,接下来需要一个密码(密码需要保存,创建之后会隐藏)。申请步骤如下

 

 

 

 

 

 条件满足上代码,token即在AuthenticationResult对象中:

 1  public async static Task<AuthenticationResult> AcquireTokenAsync(string resource, string tenantId,string clientId,string clientSecret)
 2         {
 3             if(string.IsNullOrEmpty(resource) || string.IsNullOrEmpty(tenantId) || string.IsNullOrEmpty(clientId) || string.IsNullOrEmpty(clientSecret))
 4             {
 5                 throw new Exception("The parameters can not be null or empty");
 6             }
 7             AuthenticationContext authenticationContext = new AuthenticationContext($"https://login.microsoftonline.com/{tenantId}");
 8             ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
 9             AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resource, clientCredential);
10             return authenticationResult;
11         }

2.第二种方式是通过证书的方式获取token,首先准备证书,先自制一个安装在本地。

 

 

 打开mmc,证书位置

 

 

 接着我们导出一个cer证书和一个带密码的pfx证书。接下来我们要用到powershell来生成证书凭证,红框中是我们需要更新到AzureAD上的。

 

下载app manifest将拷贝的keyCredentials内容复制进去再重新上传(或者通过powershell的方式实现更新不需要下载再上传)。

 

 

 

 更新之后如下:

 

 

 最后的一步,需要给这个app赋予权限,按自己需求分配:

 

 

 

 

 

 

 

 

 

 

 

 另外需要获取租户管理员的承认

 

 

 条件满足上代码:

 1  public async static Task<AuthenticationResult> AcquireTokenAsync(string resource, string tenantId,string clientId,string certficatePath,string certificatePassword)
 2         {
 3             if (string.IsNullOrEmpty(resource) || string.IsNullOrEmpty(tenantId) || string.IsNullOrEmpty(clientId) || string.IsNullOrEmpty(certficatePath))
 4             {
 5                 throw new Exception("The parameters can not be null or empty");
 6             }
 7             X509Certificate2 certificate = new X509Certificate2(certficatePath, certificatePassword, X509KeyStorageFlags.MachineKeySet);
 8             string authority = $"https://login.windows.net/{tenantId}";
 9             AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
10             ClientAssertionCertificate cac = new ClientAssertionCertificate(clientId, certificate);
11             AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resource, cac);
12             return authenticationResult;
13         }

AzureAD提供了如下多种方法去获取token,上面只是简单测试了其中的两种,原理大致相同。token获取的步骤是通用的,不仅仅是SharePoint online,也可以是office365下的各个产品或者任何一个应用程序或者一个api,都它可以通过AzureAD来管理授权。

 

发表评论

您的电子邮箱地址不会被公开。