【问题标题】:Enabling Oauth2sso on Google App Engine在 Google App Engine 上启用 Oauth2sso
【发布时间】:2017-12-30 12:34:02
【问题描述】:

我正在尝试在 Google 应用引擎中的应用程序上设置 spring security oauth2。一切似乎在本地运行良好,但是当我部署到应用程序引擎时,事情开始崩溃。在我通过 google 进行身份验证后,它会将我转发到 Whitelabel 错误页面。在控制台中我看到了这个错误:

http://my-application.appspot.com/login?state=t…m&session_state=8b67f5df659a8324430803973b9e1726e39fd454..1ae3&prompt=none 
401 (Unauthorized)

我使用这个 application.yml 文件设置我的身份验证:

security:
  oauth2:
client:
  clientId: client-key
  clientSecret: secret-key
  accessTokenUri: https://www.googleapis.com/oauth2/v4/token
  userAuthorizationUri: https://accounts.google.com/o/oauth2/v2/auth
  clientAuthenticationScheme: form
  scope:
    - openid
    - email
    - profile
    - https://www.googleapis.com/auth/cloud-platform
resource:
  userInfoUri: https://www.googleapis.com/oauth2/v3/userinfo
  preferTokenInfo: true

我的安全配置看起来像这样:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        .and()
            .authorizeRequests()
            .antMatchers("/static/**").permitAll()
            .antMatchers("/**").hasAuthority("ROLE_ADMIN")
            .anyRequest().authenticated()
        .and()
            .exceptionHandling()
            .accessDeniedPage("/403");
}

我已在 google 凭据页面上配置 Oauth ID 以允许授权的 javascript 来源为:

http://my-application.appspot.com
https://my-application.appspot.com
http://localhost:8080

授权重定向 URI 到:

http://my-application.appspot.com/login
https://my-application.appspot.com/login
http://localhost:8080/login

任何想法为什么我在部署到 GAE 后可能会遇到未经授权的错误?

谢谢,

克雷格

【问题讨论】:

  • 您确定您尝试进行身份验证的用户具有“ROLE_ADMIN”权限吗?
  • 阳性。我已经尝试将其剥离并在所有页面上仅使用 oauth 身份验证,但它仍然给出相同的错误。
  • 如果可能,您能否在 GitHub 上分享一个最小的、可重现的示例项目?
  • 我能够解决这个问题。原来它与 app.yaml 文件有关(很遗憾我没有在这里发布)。问题似乎与弹簧安全性和在多个实例上运行应用程序有关。当它试图加载 js 库和其他资源时,似乎没有在实例之间传递安全性。尚未研究如何解决此问题。

标签: google-app-engine spring-boot spring-security spring-security-oauth2


【解决方案1】:

您的问题与授权有关,可能错过了完全授权应用程序的步骤,例如将您的 client_secret.json 移动到您的工作目录。

https://developers.google.com/drive/v3/web/quickstart/java#step_1_turn_on_the_api_name

第 1 步:开启 Drive API

  1. 使用此向导在 Google 中创建或选择一个项目 开发者控制台并自动开启 API。点击 继续,然后转到凭据。在将凭据添加到您的 项目页面,点击取消按钮。

    1. 在页面顶部,选择 OAuth 同意屏幕选项卡。选择 电子邮件地址,如果尚未设置,请输入产品名称,然后单击 保存按钮。选择凭据选项卡,单击创建 凭据按钮并选择 OAuth 客户端 ID。

    2. 选择应用类型Other,输入名称“Drive API 快速入门”,然后单击“创建”按钮。

    3. 单击“确定”关闭结果对话框。

    4. 单击文件右侧的 file_download(下载 JSON)按钮 客户 ID。

    5. 将此文件移动到您的工作目录并重命名 client_secret.json。

有用的链接: GCM http 401 authorization error

【讨论】:

  • 仅使用一个实例即可解决此问题。似乎身份验证没有跨服务器传递。还没有机会对此进行调查。
猜你喜欢
  • 2017-08-28
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多