0

我正在尝试一次授权 Office 365,只允许用户登录一次。

到目前为止,这是我的代码

IdentityClientApp = new ConfidentialClientApplication(this.clientId, "[uri]", new ClientCredential("[private key from Application Secrets section]"), new Microsoft.Identity.Client.TokenCache(), new Microsoft.Identity.Client.TokenCache());
authResult = await IdentityClientApp.AcquireTokenForClientAsync(new []{ "User.Read.All" });

我得到一个例外:AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope User.Read.All is not valid.

我不确定我应该如何获得一个有效的令牌,我可以退出并重新启动,而无需每小时弹出 authpage。

4

1 回答 1

1

根据您的描述,您正在使用带有 MSAL 库的 Azure AD V2.0 的客户端凭据流。将客户端凭据流与 Azure AD V2.0 一起使用时,为此请求中的范围参数传递的值应该是所需资源的资源标识符(应用程序 ID URI),并带有 .default 后缀。对于 Microsoft Graph 示例,该值为https://graph.microsoft.com/.default

请点击这里了解更多详情。这是一个使用 Azure AD V2.0 端点的客户端凭据流的教程

此外,由于您使用的是应用程序身份(客户端凭据流),因此用户无需登录您的应用程序。请阅读有关Azure AD 身份验证方案的更多信息。如果您想使用用户身份,您可以尝试OAuth 2.0 授权代码流这里是一个代码示例。使用用户身份,延长会话的持续时间(用户不会在一小时后注销)。您可以尝试通过在您的页面中添加一个隐藏的 iframe 来更新会话,该 iframe 会定期命中新的登录路线(在登录操作中,您可以获得新的访问令牌)。有关详细信息和代码示例,请参阅文章控制 Web 应用的会话持续时间。

于 2017-06-05T02:03:23.003 回答