java - 如何将资源所有者密码凭据与 Google OAuth 结合使用?

标签 java oauth-2.0 google-oauth

各位,

我正在寻找使用com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.ResourceOwnerPasswordCredentialsGrant的功能示例,在不使用基于网络的用户界面的情况下对用户进行身份验证。尝试了类中提供的示例(将 https://server.example.com/authorize 替换为 https://accounts.google.com/o/oauth2/auth ),但得到 invalid_request 响应。这是发布到的正确 URL 吗?该请求是否需要设置额外的属性?尝试像这样设置范围,但没有运气 request.set("scope", "https://www.googleapis.com/auth/calendar ")。还尝试设置response_type、grant_type,任何帮助将不胜感激。这是代码(还附有 Maven 项目):

测试.java

import com.google.api.client.auth.oauth2.draft10.AccessTokenErrorResponse;
import com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.ResourceOwnerPasswordCredentialsGrant;
import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse;
import com.google.api.client.http.HttpResponseException;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson.JacksonFactory;
public class Test {
  public static void main(String[] args) throws Exception {
    try {
      ResourceOwnerPasswordCredentialsGrant request =
          new ResourceOwnerPasswordCredentialsGrant(
              new NetHttpTransport(), 
              new JacksonFactory(),
              "https://accounts.google.com/o/oauth2/auth", 
              "<client_id>", 
              "<client_secret>",
              "<user_username>", 
              "<user_password>");
      AccessTokenResponse response = request.execute();
      System.out.println("Access token: " + response.accessToken);
    } catch (HttpResponseException e) {
      AccessTokenErrorResponse response = e.response.parseAs(AccessTokenErrorResponse.class);
      System.out.println("Error: " + response.error);
    }
  }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.acme</groupId>
    <artifactId>google-oauth</artifactId>
    <version>1</version>
    <name>Google OAuth</name>
    <dependencies>
        <dependency>
            <groupId>com.google.api.client</groupId>
            <artifactId>google-api-client</artifactId>
            <version>1.4.1-beta</version>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

最佳答案

Google OAuth2.0 授权服务器不支持资源所有者密码凭据流程。如果您提供避免使用基于 Web 的 UI 的原因,可能有一些可用的解决方法 - 例如 service accounts在企业环境中,您的应用可以代表用户进行操作。

关于java - 如何将资源所有者密码凭据与 Google OAuth 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590624/

相关文章:

java - 在 AS3 中使用 QuadTree 进行碰撞检测

java - 如何修复动画 (Java) 需要帮助 =]

oauth-2.0 - 为什么每个 OAuth2 提供商的工作方式不同?

oauth - Google OAuth 针对 disallowed_useragent 的独立网络应用程序错误

oauth-2.0 - Google 的 OpenID Connect 显示 : OAuth 2 parameters can only have a single value: client_id

php - Google+ 身份验证 : refreshToken() returns invalid_grant error

java - Jtable 不可见?

java - 是否有易于使用的图像库来进行简单操作(读取、写入、旋转、调整大小)?

ruby - OAuth2 INTRIDEA gem 和 HTTP 基本身份验证 header

spring - 缺少授权类型错误