kotlin - 在 Spring Security 中请求额外的 Oauth2 范围
问题描述
假设我正在逐渐吸引我的新用户,为他们提供一种使用 Spring Security Oauth2 + Google(或任何 Oauth2 提供商)登录的方式,然后在某个地方为他们提供添加需要额外 Oauth2 范围的功能的机会(说连接日历)。
我有一个简单的工作解决方案,涉及将每组范围变成 Spring Security Oauth2 中的伪提供者。像这样的东西(请原谅 Kotlin):
@Configuration
@EnableWebSecurity
open class WebSecurityConfig: WebSecurityConfigurerAdapter() {
override fun configure(http: HttpSecurity) {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
}
@Bean
open fun clientRegistrationRepository(): ClientRegistrationRepository {
return InMemoryClientRegistrationRepository(googleClientRegistration(), googleWithCalendarClientRegistration())
}
private fun googleClientRegistration(): ClientRegistration {
// basic profile info
return CommonOAuth2Provider.GOOGLE.getBuilder("google")
.build()
}
private fun googleWithCalendarClientRegistration(): ClientRegistration {
// profile info with calendar
return CommonOAuth2Provider.GOOGLE.getBuilder("google-with-calendar")
.registrationId("google-with-calendar")
.redirectUriTemplate("{baseUrl}/{action}/oauth2/code/google")
.scope("openid", "profile", "email", "calendar.readonly")
.build()
}
}
然后,我可以将我的用户链接到https://www.example.com/oauth2/authorization/google-with-calendar
Spring Security,并通过添加的日历范围忠实地重新授权用户。
但是,如果我有第二个,然后是第三个特性,每个特性都增加了一个范围,并且每个特性都可以与任何其他特性集结合起来怎么办?我将不得不为每个功能创建一个新的伪提供程序,但为每个功能组合。
我发现了这个问题和答案,这很有趣,但感觉比我目前的解决方案略少一点。
在 Spring Security Oauth2 中是否有更惯用的方法来请求额外的范围?
解决方案
推荐阅读
- javascript - Javascript 函数将我的值转换为 undefined。我和我的老师不明白为什么
- android - Android Studio 布局预览默认主题
- jmeter - 发出 HTTP 请求时 jmeter 显示错误
- jquery - 如果只有一个孩子,我如何将课程应用于父 UL
- python - 替换字符之间的点
- javascript - 这是发送空请求的正确方法吗?
- java - 使用比较器对字符串列表进行排序
- autohotkey - autohotkey 网页抓取代码优化
- c# - 如何在 Xamarin.Forms 中获取以前的数据
- javascript - Javascript:未定义的表