我正试图从我的基于Java的网络应用程序上传到YouTube,我花了几天时间来了解问题的原因和地点,我无法得到它,因为现在我正在把头发拉出来.
我在Google控制台中注册了我的网络应用程序,因此我获得了一对客户端ID和密码以及使用我的配置下载JSON类型文件的可能性.
所以这是配置:
{
"web":{
"auth_uri":"https://accounts.google.com/o/oauth2/auth",
"client_secret":"***",
"token_uri":"https://accounts.google.com/o/oauth2/token",
"client_email":"***",
"redirect_uris":["http://localhost:8080/WEBAPP/youtube-callback.html","http://www.WEBAPP.md/youtube-callback.html"],
"client_x509_cert_url":"***",
"client_id":"***",
"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
"javascript_origins":["http://www.WEBAPP.md/"]
}
}
Run Code Online (Sandbox Code Playgroud)
我如何从Google获取默认网址?
The redirect URI in the request: http://localhost:8080/Callback did not match a registered redirect URI
它总是给我默认的http://localhost:8080/CallbackURL而不是我的.
IDE控制台告诉我:
Please open the following address in your browser:
https://accounts.google.com/o/oauth2/auth?client_id=***&redirect_uri=http://localhost:8080/Callback&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload
Attempting to open that address in the default browser now...
我使用的是最新版本的依赖项: google-api-services-youtube v3-rev99-1.17.0-rc和google-api-services-youtubeAnalytics v1-rev35-1.17.0-rc
java youtube-api google-oauth youtube-data-api google-oauth-java-client
我的应用程序中有以下工作流程:
此时,发生以下两种情况之一:
[我从不想要这种行为] - 如果用户只登录了一个Google帐户(例如gmail,Google Apps for Domains等等),则系统永远不会要求用户选择要关联的帐户.它只是假设他们想要使用他们登录的那个并继续它的快乐方式.
[我一直想要这种行为] - 如果用户未登录任何Google帐户,或者他们登录了多个Google帐户,则系统会要求他们选择要继续使用的帐户.
问题:即使用户当前登录到单个Google帐户,我还有办法强制用户选择帐户吗?
码:
private def getFlow() = {
if (flow == null) {
logger.info("Using OAuth client secrets file: " + GoogleOAuthService.CLIENT_SECRETS_JSON)
clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(),
new InputStreamReader(getClass.getResourceAsStream(GoogleOAuthService.CLIENT_SECRETS_JSON)));
redirectUri = clientSecrets.getDetails().getRedirectUris().get(0)
flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JacksonFactory.getDefaultInstance(), clientSecrets, SCOPES).setDataStoreFactory(
dataStoreFactory).setAccessType("offline").setApprovalPrompt("force").build()
}
flow
}
def newAuthorizationUrl(userId: String) = {
val urlRequest = getFlow().newAuthorizationUrl()
urlRequest.setAccessType("offline")
.setRedirectUri(redirectUri).setState(userId).build()
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Android应用程序访问Gmail API.我已成功请求并使用所有可用范围组合接收了访问令牌.但似乎每次我实际尝试使用Gmail API命令时,我都会得到一个403 exception reading: Access not configured please use Google developers console to activate the api...
不用说,API已激活,并且使用正确的包名称和sha1代码创建了客户端密钥.相同的客户端ID适用于Google Plus功能.
是否有任何人遇到此问题或成功连接到Android的Gmail API?
谢谢
这是日志:
09-04 21:40:54.014: W/System.err(26717): com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
09-04 21:40:54.014: W/System.err(26717): {
09-04 21:40:54.014: W/System.err(26717): "code" : 403,
09-04 21:40:54.014: W/System.err(26717): "errors" : [ {
09-04 21:40:54.014: W/System.err(26717): "domain" : "usageLimits",
09-04 21:40:54.014: W/System.err(26717): "message" : "Access Not Configured. Please use Google Developers Console to activate the API for your project.",
09-04 21:40:54.014: W/System.err(26717): "reason" : "accessNotConfigured"
09-04 …Run Code Online (Sandbox Code Playgroud) android google-oauth google-schemas google-oauth-java-client gmail-api
我正在开发一个带有 Angular 和 Cordova 插件的 Android 应用程序,我想将其与 Google 身份验证集成。我已经安装了cordova-plugin-googleplus 并且已成功集成到该应用程序中。当用户登录时,我会收到响应,我可以在其中获取 accessToken、配置文件用户信息和刷新令牌。
现在我想实现一个功能来刷新令牌,而不会每小时用新的提示屏幕打扰用户。
我已成功更新 accessToken,但仅在第一次有效
我用过这两种方式:
curl -X POST \
'https://oauth2.googleapis.com/token?code=XXXXXXXXXXXXXXXX&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)
重点是,当用户第一次登录(使用 cordova-plugin-googleplus)时,我收到一个具有这种格式的刷新令牌
4/rgFU-hxw9QSbfdj3ppQ4sqDjK2Dr3m_YU_UMCqcveUgjIa3voawbN9TD6SVLShedTPveQeZWDdR-Sf1nFrss1hc
Run Code Online (Sandbox Code Playgroud)
如果一段时间后我尝试以上述任何一种方式刷新令牌,我会收到带有新 accessToken 和新刷新令牌的成功响应。新的刷新令牌具有其他格式
1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J
Run Code Online (Sandbox Code Playgroud)
在第二次尝试更新令牌时,我将令牌替换为第一个请求中返回的令牌
curl -X POST \
'https://oauth2.googleapis.com/token?code=1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)
但这一次,两种方式(Curl 和 Java)我都遇到了相同的错误。
{
"error" : "invalid_grant",
"error_description" : "Malformed auth code."
}
Run Code Online (Sandbox Code Playgroud)
我在这个帖子上读到,将 clientId 指定为电子邮件是一个问题,但我还没有发现如何解决它,因为第一次登录是使用客户端 ID“XXXXXXX.apps.googleusercontent.com”完成的,并且如果我设置来自 google …
oauth-2.0 cordova google-oauth google-oauth-java-client cordova-plugins
谷歌使用授权的重定向URI来进行回调以传递授权令牌.
它也用于谷歌验证.因此,当收到实际的oauth请求时,Google会检查请求中给出的回调网址是否与"授权重定向URI"相同,如果不是,则会抛出错误.
我的要求是阻止谷歌进行此验证,因为我希望能够在运行时传递不同的回调网址.我尝试将"授权重定向URI"作为空,但这不起作用.有什么建议 ?
我们遇到了包含两条腿OAuth的Gmail原子Feed问题,错误消息是"401未经授权".
错误消息如下所示.
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
直到上周,我们使用Gmail原子Feed都没有问题.从本周开始,即使我们对Gmail原子Feed和oauth没有任何变化,我们也遇到了这个问题.现在,所有用户(50,000个帐户)都不会出现此问题,但此问题越来越多.
看来这个问题是由谷歌方面引起的.
有没有人有同样的问题?
源代码如下.
private GoogleOAuthParameters mOauthParameters;
private OAuthSigner mSigner;
private final String SCOPE = "https://mail.google.com/mail/feed/atom";
GoogleService service;
String result = null;
mOauthParameters = new GoogleOAuthParameters();
mSigner = new OAuthHmacSha1Signer();
mOauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
mOauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
service = new GoogleService("gmail","feed");
service.setOAuthCredentials(mOauthParameters, mSigner);
service.setConnectTimeout(timeOut);
service.setReadTimeout(timeOut * 5);
GDataRequest request = service.createFeedRequest(new URL(SCOPE +"?xoauth_requestor_id=" + email));
request.execute();
InputStream is = null;
try {
is = request.getResponseStream();
StringBuffer out = new StringBuffer();
byte[] …Run Code Online (Sandbox Code Playgroud) gmail google-api google-api-java-client google-oauth google-oauth-java-client
我想使用不同的“角色”(例如 info@ 、 customer-support@ 、 tech-support@ 、 no-reply@ )向我的客户发送电子邮件。
我尝试过两种方法:
我首先为我的 Gmail for Business 应用程序设置一个具有全局委托的服务帐户。
为了测试它是否有效,我设置了 2 个用户:lev@mydomain.com 和 root@mydomain.com。事实上,我可以成功地从 lev@ 和 root@ 发送电子邮件。
然而,当我尝试为我的应用程序添加 5 个不同的用户帐户时,Gmail 对机器人/滥用感到偏执,并要求我证明所有帐户都是“人性化”的,包括设置密码、登录和通过电话进行短信验证。此外,他们要求不同的账户使用不同的手机来证明是不同的人。因此,账户的设置成为一个主要问题。
我还想避免创建多个帐户,因为我要为每个帐户付费,而且从语义上讲,所有角色都只是一个帐户。所以别名似乎是一个更好的主意。
问题是,当我尝试发送电子邮件并将“发件人”字段设置为别名(例如 from:no-reply@mydomain.com)时,我收到以下异常:
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Delegation denied for root@mydomain.com",
"reason" : "forbidden"
} ],
"message" : "Delegation denied for root@mydomain.com"
}
Run Code Online (Sandbox Code Playgroud)
有人遇到并解决过这个问题吗?
认证/凭证代码如下:
/*
* Set …Run Code Online (Sandbox Code Playgroud) 我的网络应用程序使用“使用 Google for Web 登录”(https://accounts.google.com/gsi/client脚本)。由于各种原因,我现在想摆脱 JS 库并仅使用Google OAuth Client Library for Java版本 1.34.1 来实现所需的步骤。
虽然该过程本身有效,但令我恼火的是,尽管我的应用程序只要求openid email范围,但 Google 在同意(帐户选择器)对话框的底部显示以下消息:
为了继续,Google 将与 APPNAME 共享您的姓名、电子邮件地址、语言首选项和个人资料图片。
此消息对我的用户具有高度误导性,因为尽管有此消息,令牌不包含任何允许我的应用程序读取全名、个人资料图片或其他详细信息的范围 - 仅openid https://www.googleapis.com/auth/userinfo.email(相当于openid email)正如我所要求的。我故意不包含profile在范围列表中,因为我的应用程序只需要帐户 ID(用于匹配应用程序帐户)和电子邮件地址。
为什么会发生这种情况?难道我做错了什么?当我使用Google Identity客户端库时,没有出现这样的消息。从文档来看,似乎没有办法影响这种行为。
这是我重定向到的 URL(添加了换行符以提高可读性)。它是使用AuthorizationCodeFlow构建的。
https://accounts.google.com/o/oauth2/auth
?access_type=offline
&client_id=MYID.apps.googleusercontent.com
&redirect_uri=MYURL
&response_type=code
&scope=openid%20email
&state=MYSTATE
&nonce=MYNONCE
Run Code Online (Sandbox Code Playgroud)
使用Google OAuth 2.0 Playground并输入openid email. 它重定向到这个 URL:
https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount
?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground
&prompt=consent
&response_type=code
&client_id=407408718192.apps.googleusercontent.com
&scope=openid%20email
&access_type=offline
&service=lso
&o2v=2
&flowName=GeneralOAuthFlow …Run Code Online (Sandbox Code Playgroud) 我有一个需要访问Google API组合的服务器端应用程序,对于我们应用程序的某些用户,我们只需要访问一个API /范围组(例如Google Drive),其他用户访问另一个API /范围(比如说) G +),对于一些我们需要访问两者(用户可以在以后链接到应用程序的其他部分).
我们想为此使用增量授权,但是当我们第一次请求访问一组范围,然后请求访问另一组范围时,我们为第二个请求获取的访问令牌只允许访问第二个范围,而不是最初请求的范围和新范围的组合,如上面给出的Google链接中所述.
我们所有的授权网址都包含include_granted_scopes=true参数.
我们还需要做一些额外的步骤才能启用增量身份验证吗?我们在服务器端应用程序中使用Google oauth Java客户端库,如果这有任何区别的话.
这个问题描述了一个类似的问题,但对于已安装的应用程序,它包含一个很好的简单脚本来重现问题.
oauth google-api oauth-2.0 google-oauth google-oauth-java-client
我似乎在尝试将 Java 应用程序添加到存储在我的 GoogleDrive 文件夹中的文件列表时遇到了障碍。这
我在开发人员控制台中有一个项目设置。我已为该项目启用了 Drive API 我为服务帐户创建了身份验证凭据 - 并且正在使用生成的 P12 密钥。
我的代码如下所示:
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.auth.oauth2.CredentialRefreshListener;
import com.google.api.client.auth.oauth2.TokenErrorResponse;
import com.google.api.client.auth.oauth2.TokenResponse;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.List;
public class GoogleDriveTest {
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = new JacksonFactory() ;
/** instance of the HTTP transport. */
private static final HttpTransport …Run Code Online (Sandbox Code Playgroud) google-oauth ×10
google-api ×3
gmail-api ×2
java ×2
oauth-2.0 ×2
android ×1
cordova ×1
gmail ×1
oauth ×1
youtube-api ×1