我正在使用Spring Boot和JSF创建一个web应用程序,我的目的是从我的应用程序在google课堂中创建课程。
我效仿谷歌,通过Oauth进行身份验证:https://url.miapp.io/oS2mx
实现示例中ClassroomQuickstart类,但是当您在web应用程序中使用getService()方法时,它会在Tomcat Embeded Console (Spring Boot)中向我发送一个Google URL,以便我自己从浏览器进行身份验证,然后我就可以继续我的代码流程了。
换句话说,身份验证在交互模式下工作,等待我从浏览器进行身份验证,以便应用程序可以继续执行流程,我不知道我应该做什么,这样我就不必以这种方式对自己进行身份验证,我不知道是代码实现了它,还是与google开发人员控制台中的配置有关。
发布于 2020-07-14 22:37:07
3条腿OAuth:
您目前正在遵循一个三足鼎立的OAuth流程,其中涉及三方:(#1)最终用户、(#2)应用程序和(#3)授权服务器。在此OAuth流中,用户需要通过浏览器通过同意屏幕明确同意应用程序。
双腿OAuth:
由于您希望避免这种情况,因此您应该使用服务帐户来访问此应用程序,这样就不会直接涉及用户,并且不需要用户同意。此工作流通常称为双路OAuth (仅涉及应用程序和授权服务器)。更深入的解释请参见Using OAuth 2.0 for Server to Server Applications。
由于您不希望服务帐户单独运行应用程序,而是代表域中的其他帐户运行应用程序,因此您应该向它授予域范围的权限,以便它可以模拟域中的其他帐户。
工作流程:
要实现这一点,您必须执行以下步骤:
通过对服务帐户执行以下this guide.
中提供的代码示例
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)来完成。
参考资料:
https://stackoverflow.com/questions/62807438
复制相似问题