为google plus交换oauth2令牌时出现“policy_enforced”错误

时间:2014-08-26 14:45:34

标签: google-api google-oauth google-api-dotnet-client

我们的应用程序过去一直工作到最后一个星期二。我们不断获得" policy_enforced"为google plus交换oauth2令牌时出错。谷歌的回应是:

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%重现它的方法。

请让我知道这个问题是什么,感谢任何建议。

1 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题。在与Google团队联系后,我们发现此问题是由于授权范围与我们在登录时请求的内容不匹配而发生的。我们在用户登录时使用了最新的授权范围profileemail。但是在GAM API控制台中,Google硬编码了已弃用的范围 https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email

在将最新的授权范围还原为已弃用的范围后,登录工作正常。