Google ClassRoom OAuth集成春季启动

时间:2020-07-09 04:27:24

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

我正在使用Spring Boot和JSF创建一个Web应用程序,我的意图是从我的应用程序在Google教室中创建课程。

我按照Google的示例通过Oauth对自己进行身份验证:https://url.miapp.io/oS2mx

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

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

1 个答案:

答案 0 :(得分:0)

3足OAuth:

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

两足式OAuth:

由于要避免这种情况,您应该使用服务帐户来访问此应用程序,以使用户不直接参与,并且不需要用户同意。此工作流程通常称为两足式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的说明从Cloud Console下载。可以使用JSON文件而不是P12(请参见here)来完成此操作。

参考: