有时,当用户使用Google的OAuth 2.0登录网站时,他们会选择错误的帐户进行登录.通常情况下,如果用户在浏览器中注册了多个帐户,这不是问题,谷歌会自动显示用户选择屏幕:

但是,如果用户只有一个帐户并且已登录,则会跳过此屏幕.相反,我需要Google的登录面板始终显示,以便我可以确定用户可以选择尝试输入正确的帐户.我尝试使用approval_prompt = "force",但这会强制接受权限而不是简单地显示登录页面.

如何强制Google的OAuth 2.0始终显示登录屏幕?
(并且永远不会自动跳过它)
简短的问题:
2015年4月20日之后,是否有人使用Google Custom Search Api进行身份验证?
更长的版本:
我正在尝试使用Google Custom Search Api来请求按需索引.在我开始之前,我遇到了身份验证问题.根据文档,您应该使用ClientLogin Api进行身份验证.这个Api于2015年4月20日关闭,当你尝试从中获取令牌时它现在返回404.
ClientLogin 文档上的弃用通知声明使用Oauth.
因此,我试图验证几乎一样侯赛因在这里 我收到了来自谷歌的承载令牌,但是当我尝试做一个请求,我收到了401以下消息
<Error>You are not authorized to access this resource. If you feel this is an error, try re-logging into your Google Account.</Error>
Run Code Online (Sandbox Code Playgroud)
这并不奇怪,因为没有最新文档,我盲目地试图寻找正确的解决方案.
我目前在C#中的代码:
private static async Task Run()
{
var credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer("blablabla@developer.gserviceaccount.com")
{
Scopes = new[] { "https://www.googleapis.com/auth/cse" }
}.FromPrivateKey("-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n"));
await credential.RequestAccessTokenAsync(CancellationToken.None);
var token = credential.Token;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = …Run Code Online (Sandbox Code Playgroud) google-api google-search-api google-custom-search google-oauth2
我在我的应用中包括通过google功能登录,为此我已经为我的调试和发布模式创建了oauth客户端ID密钥,但是由于所有操作均无法正常进行,因此我想再次删除并重新创建它,所以我删除了两个密钥,但是现在当我尝试创建新密钥时,它给了我错误
Duplicate fingerprint
The fingerprint you specified is already used by an Android OAuth2 client ID in this project or another project
Run Code Online (Sandbox Code Playgroud)
但是我已经删除了两个密钥,我尝试了堆栈溢出中已经存在的所有解决方案,例如进入旧的控制台门户等。但是都没有帮助我,请帮助我解决这个问题
我正在使用基于Intranet的应用程序,并且想使用Google服务。目前,我已经使用JavaScript客户端身份验证成功实现了带有“网站登录”功能的Google身份验证。我的用户现在可以登录或注册其Google帐户。
现在,我想使用Google API创建我的用户并与他们共享Google表格。这些文档将使用特定的Google帐户创建,然后与我的用户共享。
这就是为什么我要使用此服务器幻灯片流程获取一次性授权代码并将其交换为刷新令牌的原因:https : //developers.google.com/identity/sign-in/web/server-side-流
此刷新令牌将存储在我的数据库中,使我可以代表该离线用户使用Google服务。
使用JavaScript库,我能够获得随AJAX请求发送到服务器的一次性授权代码。
auth2.grantOfflineAccess({'redirect_uri': 'postmessage'}).then(grantOfflineAccessCallback);
var grantOfflineAccessCallback = function(authResult) {
var auth_code = authResult.code;
// Exchange the one-time authorization code for tokens
$.post(...);
}
Run Code Online (Sandbox Code Playgroud)
在服务器端,我使用Google API PHP客户端(v2.0.0-RC6)获取访问和刷新令牌。
$this->client = new Google_Client();
$this->client->setClientId($this->clientId);
$this->client->setClientSecret($this->clientSecret);
$this->client->setAccessType('offline');
$this->client->setApprovalPrompt('force');
$response = $this->client->fetchAccessTokenWithAuthCode($oneTimeCode);
Run Code Online (Sandbox Code Playgroud)
我无法交换授权码。
Client error: `POST https://www.googleapis.com/oauth2/v4/token` resulted in a `400 Bad Request` response:
{
"error": "invalid_request",
"error_description": "Missing parameter: redirect_uri"
}
Run Code Online (Sandbox Code Playgroud)
在此页面上,我们可以阅读:
在服务器上,将身份验证代码交换为访问和刷新令牌。使用访问令牌代表用户调用Google API。
在JAVA示例代码上:
REDIRECT_URI: // Specify the same redirect URI that you use with …Run Code Online (Sandbox Code Playgroud) 根据身份验证代码流,我正在尝试从Google获取访问令牌。
由于它无法在我的后端正常工作,因此我尝试对其进行卷曲/邮递员处理,但这也不起作用。
curl -d "&code=4/IkYUPa4FNw_-o6bd4v5dLqVx4ssGfyPJRBQFzy9aNQ&client_id=807080008535-9ji0g54v0lt9b6ukn19rp807k3j2t0uj.apps.googleusercontent.com&client_secret=SOMESECRET&redirect_uri=com.fitisfit.app:/googlefit&grant_type=authorization_code" https://www.googleapis.com/oauth2/v4/token
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
{
"error": "invalid_grant",
"error_description": "Bad Request"
}
Run Code Online (Sandbox Code Playgroud)
如果我连续(3或4)次卷曲,则会收到一条错误消息,提示代码已被兑换。因此,Google网站上可能发生了某些情况。
我做了一些研究,但所有建议都没有帮助(拼写,检查服务器时间,添加access_type=offline到第一个OAuth步骤网址等)
更新:我刚刚发现了问题。我必须设置curl参数,例如:
curl \
-d code=4/LjNMkGqqQvJAB96Z6F-U52u4kqo5RHkqLp0LJYZ-zAw \
-d client_id=807080008535-9ji0g54v0lt9b6ukn19rp807k3j2t0uj.apps.googleusercontent.com \
-d client_secret=SOMESECRET \
-d redirect_uri=http://localhost \
-d grant_type=authorization_code https://www.googleapis.com/oauth2/v4/token
Run Code Online (Sandbox Code Playgroud) 在Google的OIDC指南中,部分Exchange code for access token and ID token指出我必须提供client_secret。
如果我从API控制台中选择了相关的客户端ID,则确实会得到一个名为的JSON文件client_secret_...。但是,JSON对象的所有字段均未命名为secret或类似名称。(字段被命名为client_id,project_id,auth_uri,token_uri,auth_provider_x509_cert_url,和redirect_uris)。
那么,我从哪里得到的client_secret呢?
android google-oauth google-oauth2 google-signin google-developers-console
我有一个带Google登录功能的Android应用。根据文档,我生成了令牌ID:
// Configure Google Sign-In with the requestIdToken
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
// Handle result
private void handleSignInResult(GoogleSignInResult result) {
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
String tokenId = account.getIdToken();
}
}
Run Code Online (Sandbox Code Playgroud)
我在Ruby on Rails的服务器端面临问题。我正在尝试使用google-id-token宝石。自述文件给出了以下示例:
validator = GoogleIDToken::Validator.new(expiry: 1800)
begin
payload = validator.check(token, required_audience, required_client_id)
email = payload['email']
rescue GoogleIDToken::ValidationError => e
report "Cannot validate: #{e}"
end
Run Code Online (Sandbox Code Playgroud)
我有token(来自android java代码)。什么required_audience啊 我应该使用相同client_id的客户端应用程序吗?当我尝试在服务器上运行代码时,得到的有效负载为nil。
另外,我想知道这是否是验证令牌ID的正确方法。
我想从我的个人日历中获取所有活动.我已经尝试了几个小时所有类型的auth类型:我成功地使用回调验证,我应该登录到我的谷歌帐户,然后谷歌重定向回我的网站. - 但这不是我需要的.此外,我尝试使用默认凭据,令我惊讶的是,我无法访问我的日历,这是什么样的逻辑.
基本上,它在Spotify中如何为我工作:在Spotify中可以在我的帐户中生成客户端ID和密码.之后,我从我的代码中发送带有base64(client:password)的HTTP,并从我的代码接收令牌,我用它来查询某些实体.
但在谷歌API我没有找到这样的解决方案.也许有人可以建议如何进行身份验证?
php google-calendar-api google-api google-oauth google-oauth2
新谷歌聊天聊天的文档说你需要授权范围https://www.googleapis.com/auth/chat.bot做几乎任何事情.
这是错误:
在使用OAuth2客户端生成身份验证URL时,我收到范围无效的消息.如果我使用https://www.googleapis.com/auth/chat或google plus等其他范围,我就没有这个问题.
当我尝试在API资源管理器中搜索内容时,URL或URL部分的组合也不起作用.
这是我获取URL的代码,似乎对其他一切工作正常:
var {google} = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(
"clientid-idididid.apps.googleusercontent.com",
"_secretsuff",
"http://localhost:3000/auth/google/callback"
);
var scopes = [
"https://www.googleapis.com/auth/chat", //Works
"https://www.googleapis.com/auth/chat.bot" // Does not work
];
var url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: scopes,
});
console.log(url);Run Code Online (Sandbox Code Playgroud)
google-oauth2 ×10
google-api ×6
google-oauth ×5
oauth ×2
oauth-2.0 ×2
android ×1
cordova ×1
curl ×1
owin ×1
php ×1
ruby ×1