我正在尝试在Google应用引擎中的应用上设置spring security oauth2。一切似乎在本地工作正常,但当我部署到应用程序引擎时,事情开始崩溃。我通过谷歌进行身份验证后,将其转发给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后,为什么我可能会收到未经授权的错误?
谢谢,
克雷格
答案 0 :(得分:2)
您的问题与授权有关,可能错过了完全授权应用程序的步骤,例如将client_secret.json移动到您的工作目录。
https://developers.google.com/drive/v3/web/quickstart/java#step_1_turn_on_the_api_name
第1步:启用云端硬盘API
使用此向导在Google中创建或选择项目 开发人员控制台并自动打开API。点击 继续,然后转到凭据。在添加凭据到您的 项目页面,单击取消按钮。
在页面顶部,选择OAuth许可屏幕标签。选择 如果尚未设置电子邮件地址,请输入产品名称,然后单击 保存按钮。选择“凭据”选项卡,单击“创建” 凭据按钮并选择OAuth客户端ID。
选择应用程序类型其他,输入名称“Drive API “快速入门”,然后点击“创建”按钮。
单击“确定”关闭生成的对话框。
点击右侧的file_download(下载JSON)按钮 客户ID。
将此文件移至工作目录并重命名 client_secret.json。