我正在尝试用web服务为我的spring boot运行azure active directory。问题是当我成功登录时,它会抛出一个错误:
我已经用添加了以下属性(tetant-id、client-id、client-secret、user-group.allowed-group-names)
azure.activedirectory.redirect-uri-template=http://localhost:8080/login/oauth2/code/
我的配置是:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class AADSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/health");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/oauth2/**", "/login/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.oauth2Login();
}
}
简单的控制器请求是:
@GetMapping("/list")
@PreAuthorize("hasRole('Admin') or hasRole('Users')")
public String getListPage() {
return "list";
}
依赖关系的版本为:
<spring.security.version>5.6.0</spring.security.version>
<spring.boot.version>2.5.4</spring.boot.version>
<azure.version>3.10.0</azure.version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-starter-active-directory</artifactId>
<version>${azure.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
<version>5.6.0</version>
</dependency>
你能不能用这个问题启发我,这样我就可以绕过去吗?
更新:使用msal4j解决。
示例如下:
https://github.com/Azure-Samples/ms-identity-java-webapp/tree/master/msal-java-webapp-sample
检查令牌并使用 https://jwt.io 来验证声明:
1) 确保您选择了正确的签名算法(RS256)。JWT的标头包含有关用于签名令牌的密钥和加密方法的信息:
例:
{
"typ": "JWT",
"alg": "RS256",
"x5t": "iBjL1Rcqzhiy4fpxIxdZqohM2Yk",
"kid": "iBjL1Rcqzhiy4fpxIxdZqohM2Yk"
}
2) 检查 kid 声明指示用于验证令牌的特定公钥。确保根据用于对令牌进行签名的密钥进行检查。
3) 验证 scp 声明以验证用户是否已向调用应用授予调用 API 的权限。
4) 与aud(受众)核对:这标识令牌的预期接收者-其受众。API必须验证此值,如果值不匹配,则拒绝令牌。在v2.0令牌中,这始终是API的客户端ID,而在v1.0令牌,它可以是请求中使用的客户端ID或资源URI,具体取决于客户端请求令牌的方式。
5) 角色和 wids 声明,以验证用户本身是否有权调用您的 API。例如,管理员可能有权写入您的 API,但无权写入普通用户。
有关详细信息,请参阅这些文档
我在Rest服务上使用JWT的Spring启动和Spring安全。我使用了下面链接中的代码:https://www.javainuse.com/spring/boot-jwt-mysql它工作正常,但是当我们使用它的令牌进行身份验证时...我们面临以下错误: til.getSignatureException:JWT签名与本地计算的签名不匹配。JWT有效性不能被断言,也不应该被信任。在til.ja
我有这个超级班: 我想确定我完全理解了解决方案。通过,我给类DAOBase指定了特定的名称“daoBaseBeanname”,应用程序可以用它来标识类DAOBase,这样就不会把它与扩展DAOBase的其他类混淆了。对吗? 谢谢你。
我有这个超级班: 谢谢你。
我设置了以下信息: 创建了AWS S3存储桶并将一些映像上载到特定文件夹 创建了AWS CloudFront web发行版: 来源域名:从列表中选择的S3 bucket 限制存储桶访问:是 来源访问标识:选定的已有标识 授予桶的读取权限:是,更新桶策略 拒绝访问
由于Zuul不支持与SC的brixton.m3打包的版本中的补丁(https://github.com/spring-cloud/spring-cloud-netflix/issues/412),我正在尝试将一个基于Spring Boot+Spring Cloud的项目升级到brixton.m4。我启用了Spring-boot-starter-actul和spring-cloud-starter-
问题内容: 我像往常一样重新编译了我的课程,并突然收到以下错误消息。为什么?我该如何解决? 问题答案: 当从不同的JAR文件加载属于同一个程序包的类,并且这些JAR文件具有使用不同证书签名的签名时,就会发生这种情况-或更常见的是,至少有一个签名,而另一个或多个未签名(包括已加载的类)目录中,因为这些AFAIK无法签名)。 因此,请确保使用相同的证书对所有JAR(或至少包含相同包中的类的JAR)