我们的应用程序过去一直工作到最后一个星期二。在将oauth2 token 交换为Google Plus时,我们不断收到“policy_enforced”错误。谷歌的回应是:

Google.Apis.Auth.OAuth2.Responses.TokenResponseException:
Error:"policy_enforced",
Description:"Access denied by a security policy established by the Google Apps administrator of your organization. Please contact your administrator for further assistance.",
Uri:""

我们使用的是google-api-dotnet-client,代码很简单。
var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
    DataStore = new CustomGoogleDataStore(),
    ClientSecrets = new global::Google.Apis.Auth.OAuth2.ClientSecrets { ClientId = client.ID, ClientSecret = client.Secret },
    Scopes = scopes.Split(' '),
});
var token = flow.ExchangeCodeForTokenAsync(guid, code, redirectUri, CancellationToken.None).Result;

范围是:
"https://www.googleapis.com/auth/plus.login",
"https://www.googleapis.com/auth/plus.profile.emails.read",
"https://www.googleapis.com/auth/plus.me",
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email",
"https://mail.google.com/"

此问题随机发生。现在我无法找到100%复制它的方法。

请让我知道这个问题是什么,任何建议将不胜感激。

最佳答案

我最近遇到了同样的问题。与Google小组联系后,我们发现此问题的发生是由于授权范围与登录时我们要求的范围不匹配。用户登录时,我们使用了最新的授权范围profileemail。但是Google在GAM API控制台中硬编码了已弃用的范围
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email
将最新的授权作用域还原为已弃用的作用域后,登录正常。

09-27 07:35