【问题标题】:Google ClassRoom OAuth Integration Spring Boot谷歌课堂 OAuth 集成 Spring Boot
【发布时间】:2020-07-09 04:27:24
【问题描述】:

我正在使用 Spring Boot 和 JSF 创建一个 Web 应用程序,我的目的是通过我的应用程序在 google 课堂中创建课程。

我按照谷歌的例子通过Oauth认证自己:https://url.miapp.io/oS2mx

实现示例中的 ClassroomQuickstart 类,但是当您在我的 Web 应用程序中使用 getService() 方法时,它会在 Tomcat 嵌入式控制台(Spring Boot)中向我发送一个 Google URL,以便我自己从浏览器进行身份验证,我可以继续我的代码流程。

换句话说,身份验证在交互模式下工作,等待我从浏览器进行身份验证,以便应用程序可以继续执行流程,我不知道我应该做什么,这样我就不必在此验证自己方式,我不知道它是按原样实现它的代码还是与谷歌开发者控制台中的配置有关。

【问题讨论】:

  • 如果你想避免用户必须同意应用程序,你应该使用一个服务帐户,它遵循一个不需要用户交互的2-legged OAuth flow。如果你想让它代表用户访问数据,你必须grant it domain-wide authority。您认为这适合您的情况吗?
  • 谢谢,我只想创建课程并向学生发送邀请,每个人都将在我的应用程序之外从他们的教室.google.com 帐户登录,实际上我的应用程序只会创建课程和关联学生和老师是我所需要的,你认为我应该遵循什么方式来实现这一目标?谢谢
  • 在这种情况下,您应该使用服务帐户来模拟自己。能否请您提供与您当前正在遵循的 OAuth 流程相关的代码以及相应的 API 请求?
  • 是的,这就是代码,我已经在spring boot + jsf app中实现了(代替main方法,有一个点击监听JSF)developers.google.com/classroom/quickstart/java
  • 嗨!我发布了一个关于这个的答案。您能否确认这是否解决了您的问题?

标签: spring-boot oauth-2.0 google-classroom


【解决方案1】:

三足 OAuth:

您目前正在遵循一个三足式 OAuth 流程,其中涉及三方:(#1) 最终用户、(#2) 应用程序和 (#3) 授权服务器。 在此 OAuth 流程中,用户需要通过浏览器通过同意屏幕明确同意应用程序

2-legged OAuth:

由于您想避免这种情况,您应该使用服务帐户来访问此应用程序,这样用户不会直接参与,也不需要用户同意。此工作流通常称为 2-legged OAuth(仅涉及应用程序和授权服务器)。更深入的解释请参见Using OAuth 2.0 for Server to Server Applications

由于您不希望服务帐户自己运行应用程序,而是代表域中的其他帐户执行操作,您应该授予它域范围的权限,以便它可以模拟其他帐户域

工作流程:

要实现这一点,您必须遵循以下步骤:

  • 关注this guide创建服务帐号。
  • 将域范围的权限委派给服务帐户(您必须是域管理员才能执行此操作):此步骤授权服务帐户代表域中的任何用户访问数据。按照here 指示的步骤操作。
  • 一旦您委派了域范围的权限,您就必须修改与构建 OAuth 凭据相关的代码。例如,使用this answer 中提供的代码示例:
GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(HTTP_TRANSPORT)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId("service-account@email-address") // Service account email
    .setServiceAccountPrivateKeyFromP12File(new File("your-credentials.p12"))
    .setServiceAccountScopes(Collections.singleton(ClassroomScopes.CLASSROOM_COURSES))
    .setServiceAccountUser("user@email-address") // Your email address (address of the user you want to impersonate)
    .build();

在这种情况下,user@email-address 是指应为其创建课程的帐户。换句话说,它将是服务帐户应该模拟的帐户。关于P12 文件,应从云控制台下载,如here 所述。这可以使用JSON 文件而不是P12 来完成(请参阅here)。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    相关资源
    最近更新 更多