我正在使用Spring Boot和JSF创建一个Web应用程序,我的意图是从我的应用程序在Google教室中创建课程。
我按照Google的示例通过Oauth对自己进行身份验证:https://url.miapp.io/oS2mx
从示例中实现该ClassroomQuickstart类,但是当您在Web应用程序中使用方法getService()时,它将在Tomcat嵌入式控制台(Spring Boot)中向我发送一个Google URL,以便由我自己从浏览器进行身份验证,我可以继续执行我的代码。
换句话说,身份验证以交互模式工作,等待我从浏览器进行身份验证,以便应用程序可以继续执行流程,我不知道该怎么做,这样我就不必在此进行身份验证方式,我不知道是按原样实现它的代码还是与Google Developer Console中的配置有关。
答案 0 :(得分:0)
您当前正在遵循三足式OAuth流程,其中涉及三方:(#1)最终用户,(#2)应用程序和(#3)授权服务器。 在此OAuth流程中,用户需要在浏览器中通过同意屏幕明确同意该应用程序。
由于要避免这种情况,您应该使用服务帐户来访问此应用程序,以使用户不直接参与,并且不需要用户同意。此工作流程通常称为两足式OAuth(仅涉及应用程序和授权服务器)。有关更深入的说明,请参见Using OAuth 2.0 for Server to Server Applications。
由于您不希望服务帐户自己运行应用程序,而是代表域中的其他帐户执行操作,因此应授予其域范围的权限,以便它可以模拟其他帐户。域。
要实现此目的,您必须执行以下步骤:
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)来完成此操作。