繁体   English   中英

如何在Google OAuth中使用资源所有者密码凭证?

[英]How to use Resource Owner Password Credentials with Google OAuth?

民间,

我正在寻找一个使用com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.ResourceOwnerPasswordCredentialsGrant的功能示例, 无需使用基于Web的UI即可对用户进行身份验证 尝试了该类中提供的示例(将https://server.example.com/authorize替换为https://accounts.google.com/o/oauth2/auth ),但收到invalid_request响应。 这是要发布的正确网址吗? 请求是否需要在其上设置其他属性? 尝试过这样的设置范围,但没有运气request.set(“ scope”,“ https://www.googleapis.com/auth/calendar ”)。 还尝试设置response_type,grant_type,将不胜感激。 这是代码(还附带了Maven项目):

Test.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的理由,则可能有一些解决方法可用-例如,企业设置中的服务帐户 ,您的应用可以代表用户执行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM