Microsoft.InformationProtection.Exceptions.AccessDeniedException:服务不接受身份验证令牌

问题描述

我想扩展现有的迁移工具,以便在文件导入到Sharepoint Online之前在文件上设置敏感度标签。我已经找到了Microsoft information Protection SDK,它似乎提供了必要的API。

为了熟悉API,我下载并运行了ServicePrincipalAuth示例应用程序(请参见https://docs.microsoft.com/en-us/samples/azure-samples/mipsdk-dotnet-file-serviceprincipalauth/mipsdk-dotnet-file-serviceprincipalauth/)。但是,尽管我已经严格按照步骤进行操作,但是在行FileFile方法中始终会收到一条AccessDeniedException消息,消息为“服务未接受身份验证令牌”

var engine = Task.Run(async () => await profile.AddEngineAsync(enginesettings)).Result;

到目前为止,我已经尝试了两种身份验证变体(证书和秘密密钥)。两者的结果相同。

我的App.config文件如下:

<configuration>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
  </startup>
  <appSettings>
    <add key="ida:ClientId" value="[client ID from Azure AD app]"/>    
    <add key="ida:RedirectUri" value="mipsdk-auth-sample://authorize2"/>
    <add key="ida:CertThumbprint" value="[thumbprint of my self-signed certificate]"/>
    <add key="ida:ClientSecret" value="[client secret from Azure AD app]"/>
    <add key="ida:DoCertAuth" value="true"/>        
    <add key="ida:Tenant" value="[my tenant name].onmicrosoft.com"/>        
    <add key="app:Name" value="mipsdk-auth-sample2"/>
    <add key="app:Version" value="1.0.0"/>    
  </appSettings> 
</configuration>

更新:

我们的管理员需要同意Azure AD应用程序请求的API权限。完成此操作后,身份验证将按预期工作!

不幸的是,我遇到了一个错误

用户的RMS服务已禁用发布。CorrelationId = e2e ...,CorrelationId.Description = FileHandler,HttpRequest.Id = 00d ...,ServicedisabledError.Extent = User >

这次是在SetLabel方法中的行:

var result = Task.Run(async () => await handler.CommitAsync(options.OutputName)).Result;

错误消息建议为用户启用RMS服务。我(或我们的管理员)如何为Azure AD应用程序执行此操作?

任何提示都将不胜感激!

解决方法

您看到的错误是因为RMS服务中启用了入职控制策略。

https://docs.microsoft.com/en-us/powershell/module/aadrm/set-aadrmonboardingcontrolpolicy?view=azureipps

您需要跟管理员进行跟进,询问他们如何配置策略。如果他们已经设置了一个组,则需要将服务主体添加到AAD组中,该AAD组是入职控件的一部分。