我有一个Spring应用程序,它具有keydeport依赖性。前端发送到我的后端承载令牌,我想使用这个令牌从keydeport获取用户名和他的UUID。
这是我的钥匙斗篷配置。
@Configuration
@ComponentScan(
basePackageClasses = KeycloakSecurityComponents.class,
excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.keycloak.adapters.springsecurity.management.HttpSessionManager"))
@EnableWebSecurity
class KeycloakConfig extends KeycloakWebSecurityConfigurerAdapter {
@Bean
public KeycloakConfigResolver keycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new NullAuthenticatedSessionStrategy();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(keycloakAuthenticationProvider());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http
.csrf().disable()
.sessionManagement()
.and()
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMINS")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().permitAll();
}
}
在这个endpoint中,我得到授权头:
@PostMapping(value = "/save/{title}")
@ResponseBody
public ResponseEntity uploadFile(@RequestParam("file") MultipartFile file, @PathVariable("title") String title, @RequestHeader("Authorization") String authHeader) {
//get user by token?
}
简而言之,我解析公钥和访问令牌以获得AccessToken类,该类包含您所需要的所有内容(AccessToken.getId()和AccessToken)。getPreferredUsername())
@Autowired
private KeycloakSpringBootProperties keycloakProperties;
public String getRealm() {
return keycloakProperties.getRealm();
}
public String getAuthServerUrl() {
return keycloakProperties.getAuthServerUrl();
}
public String getRealmUrl() {
return getAuthServerUrl()
+ "/realms/"
+ getRealm();
}
public String getOpenIdConnectUrl() {
return getRealmUrl() + "/protocol/openid-connect";
}
public String getOpenIdConnectCertsUrl() {
return getOpenIdConnectUrl() + "/certs";
}
public AccessToken loadAccessToken(String accessToken) throws TokenNotActiveException, VerificationException, NoSuchFieldException {
PublicKey publicKey = new KeyCloakRsaKeyLoader().getPublicKeyFromKeyCloak(getOpenIdConnectCertsUrl());
String realmUrl = keyCloakConnectionProvider.getRealmUrl();
AccessToken token =
RSATokenVerifier.verifyToken(
accessToken,
publicKey,
realmUrl,
true,
true);
return token;
}
在Postman中,我可以使用 回调URL Auth URL 客户端ID 我如何使用C#代码做同样的事情?
我正在运行一个Cordova应用程序,它连接到一个承载在Azure上的Web API。我已经使用Azure AD承载身份验证保护了API。当用户试图调用其中一个endpoint时,他会被转发到Azure广告登录页面,输入他的凭据,然后得到令牌。该令牌将添加到API的所有后续请求中。我正在使用mobile apps客户端SDK(cordova-plugin-ms-azure-mobile-apps)
我目前面临以下情况。 通过google APIendpoint通过HttpCall发送Firebase消息: 在这里,我们必须将OAuth2.0与有效的承载令牌一起使用,如本问题中讨论的: 我应该使用什么承载令牌进行Firebase云消息传递测试? 按照这些步骤操作后,我就可以通过谷歌API发送Firebase消息了。 现在,我想通过HttpCall获得无记名令牌,而不需要手动操作操场https:
我目前正在使用Postman来生成承载令牌,我正在自动化测试中使用它。现在,我也想使用Java中的REST Assured来自动化承载令牌生成过程。请帮帮我.谢了。
使用邮递员,我可以毫无问题地获得令牌。如果单击和,我会得到以下代码片段: 当我尝试在Rest Assured中对请求建模时,我得到了一个400错误,但不清楚为什么: 我哪里出了问题很明显吗?是否应该将键/值传递到中?
使用由ADAL.NET使用此方法生成的承载令牌来保护对API的调用。 然而,当我查看API收到的声明时…没有显示为用户唯一的标识符。Nameidentifier声明对于我为其生成令牌的每个用户都是相同的。 在上面的代码中生成的objectid是令牌生成过程中唯一独特的方面,在令牌的API解构造中表示的声明中,这似乎并不重要。