相关疑难解决方法(0)

为什么OAuth v2同时具有访问权限和刷新令牌?

OAuth 2.0协议草案的4.2节指出授权服务器可以返回a access_token(用于向资源验证自己)以及a refresh_token,它纯粹用于创建新的access_token:

https://tools.ietf.org/html/rfc6749#section-4.2

为什么两者都有?为什么不只是做到access_token最后只要refresh_token没有refresh_token?

security oauth access-token refresh-token

603
推荐指数
11
解决办法
20万
查看次数

如何使用gmail api获取访问令牌

我在本文档后面获得了授权码.但是当我试图获得访问令牌时,我总是遇到错误.谁能帮我 ?

public String AccessToken()
{
    String accessToken = "";
    StringBuilder strBuild = new StringBuilder();

    String authURL = "https://accounts.google.com/o/oauth2/token?";
    String code = "4/SVisuz_x*********************";
    String client_id = "******************e.apps.googleusercontent.com";
    String client_secret = "*******************";
    String redirect_uri = "urn:ietf:wg:oauth:2.0:oob";
    String grant_type="authorization_code";
    strBuild.append("code=").append(code)
            .append("&client_id=").append(client_id)
            .append("&client_secret=").append(client_secret)
            .append("&redirect_uri=").append(redirect_uri)
            .append("&grant_type=").append(grant_type);
    System.out.println(strBuild.toString());
    try{
        URL obj = new URL(authURL);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setDoOutput(true);
        con.setRequestMethod("POST");

        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        con.setRequestProperty("Host", "www.googleapis.com");

        //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(con.getOutputStream()));
        //bw.write(strBuild.toString());
        //bw.close();

        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(strBuild.toString());
        wr.flush();
        wr.close();

        //OutputStreamWriter out …
Run Code Online (Sandbox Code Playgroud)

java google-api gmail-api

12
推荐指数
2
解决办法
2万
查看次数

Google Play Developer API - 400 无效值 - InAppPurchases

我的问题与此类似。但是,我使用带有服务帐户的API Java 客户端库,从我的服务器调用 API。

我的代码遵循本指南,非常简单。但是,对于我的请求,我似乎无法得到适当的错误。这就是我构建我的方式AndroidPublisher:

val credential = GoogleCredential.fromStream(FileInputStream(
        "/path/to/json"
)).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER))

androidPublisher = AndroidPublisher.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(packageName)
        .build()
Run Code Online (Sandbox Code Playgroud)

JSON 是从开发人员控制台生成的,位于服务帐户下。这是我提出请求的方式:

androidPublisher.purchases().subscriptions().get(packageName, "valid-sku", "invalid-token").execute()
Run Code Online (Sandbox Code Playgroud)

我的订阅 ID 有效,但我的令牌无效。我希望响应中出现诸如“无效令牌”之类的错误。但是,我得到的是:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid Value",
    "reason" : "invalid"
  } ],
  "message" : "Invalid Value"
}
Run Code Online (Sandbox Code Playgroud)

这是由于令牌无效而导致的一般错误还是身份验证问题?如果是身份验证问题,我该如何解决?如果是无效的令牌问题,我怎么知道?

更多信息:

  • 尝试从 API Explorer 进行该调用时,我也遇到了同样的错误(这次使用客户端 ID 和 API 密钥而不是服务帐户)。
  • 我尚未委派对服务帐户的全域访问权限。我必须出于某种原因吗?
  • 我可以成功地对 API进行其他调用,例如 …

java google-api-java-client kotlin google-oauth google-play-developer-api

7
推荐指数
4
解决办法
5901
查看次数

签名无效.预期的签名基本字符串,JAVA

我们正在使用这段代码通过oAuth向aweber发送请求

long unixTime = System.currentTimeMillis() / 1000L;
OAuthRequest request1 = new OAuthRequest(Verb.GET,"https://api.aweber.com/1.0/accounts/1111/lists/1111/subscribers", service);
request1.addBodyParameter("ws.op", "create");
request1.addBodyParameter("email", "account@gmail.com");
request1.addBodyParameter("name", "ankur");
request1.addBodyParameter("oauth_token_secret", "mysecret");
request1.addBodyParameter("oauth_token", "mytoken");
request1.addBodyParameter("oauth_consumer_key", "mykey");
request1.addBodyParameter("oauth_signature_method", "HMAC-SHA1");
request1.addBodyParameter("oauth_nonce", "secret");
request1.addBodyParameter("oauth_timestamp", String.valueOf(unixTime));

service.signRequest(accessToken, request1);
Response response1 = request1.send();
// Create a reader to read Twitter's stream
BufferedReader reader1 = new BufferedReader(new InputStreamReader(response1.getStream()));

String line;
while ((line = reader1.readLine()) != null) {
    System.out.println(line);
}      
Run Code Online (Sandbox Code Playgroud)

但我们正在回应这个问题

{
    "error": {
        "status": 401,
        "documentation_url": "https://labs.aweber.com/docs/troubleshooting#unauthorized",
        "message": "Invalid signature. Expected signature base string: GET%26https%3A%2F%2Fapi.aweber.com%2F1.0%2Faccounts%2F1111%2Flists%2F1111%2Fsubscribers%26oauth_consumer_key%3Dmykey%26oauth_nonce%3Dnonce%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1461676770%26oauth_token%3Dmytoken%26oauth_version%3D1.0%20https%3A%2F%2Flabs.aweber.com%2Fdocs%2Ftroubleshooting%23unauthorized",
        "type": "UnauthorizedError" …
Run Code Online (Sandbox Code Playgroud)

java oauth aweber

5
推荐指数
2
解决办法
2580
查看次数

Gmail Api服务帐户提供失败的前提条件响应

我正在尝试使用服务帐户在JUnit测试中从gmail发送电子邮件.

我有这个测试:

@Test
public void testGmailCredential() throws GeneralSecurityException, URISyntaxException {
    try {
        InputStream is = getClass().getClassLoader().getResourceAsStream("myProject.json");
        GoogleCredential credential = GoogleCredential.fromStream(is).createScoped(GmailScopes.all());

        System.out.println("Scopes are " + credential.getServiceAccountScopesAsString());

        Gmail gmailService = new Gmail.Builder(getHttpTransport(), JSON_FACTORY, credential)
                  .setApplicationName("WHAT SHOULD THIS VALUE BE?")
                  //.setHttpRequestInitializer(credential)
                  .build();

        InternetAddress to = new InternetAddress("myemail@myurl.com", "Tom Catfish");
        InternetAddress from = new InternetAddress("myServiceAccountId@xxxxxxxxxx.iam.gserviceaccount.com", "Some Name");

        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        MimeMessage email = new MimeMessage(session);

        email.setFrom(from);
        email.addRecipient(javax.mail.Message.RecipientType.TO, to);
        email.setSubject("Subject here");
        email.setText("body here");

        ByteArrayOutputStream buffer = new ByteArrayOutputStream(); …
Run Code Online (Sandbox Code Playgroud)

java gmail service-accounts

5
推荐指数
1
解决办法
1459
查看次数