我正在尝试使用Spring Boot和OAuth2进行概念验证。我设立了一些项目,与这里概述的项目非常相似:
https://spring.io/guides/tutorials/spring-boot-oauth2/
这里:https://spring.io/guides/tutorials/spring-security-and-angular-js/
与我的主要区别是我遗漏了所有AngularJS的东西。
我有以下服务:
我想做的就是:
我可以在auth服务器上使用基本身份验证使这一切正常工作。但是,我希望能够将基本身份验证替换为来自Active Directory的身份验证。
我有几个其他的SpringBoot项目可以做广告认证,它可以工作,但是每当我尝试把它放到这个项目中时,就会出错。我认为这与auth服务器endpoint的安全性有关,但我不确定是什么。
此外,我还不清楚哪些endpoint应该由什么协议保护(OAuth2 v.基本)在正式生产环境中?文档建议使用Basic保护一些endpoint。所有的OAuth2客户端都应该在请求中包含这些凭据吗?
下面是我的auth server应用程序(添加了用于Active Directory的位):
@EnableResourceServer
@EnableAuthorizationServer
@SpringBootApplication
@RestController
public class AuthServerLdapApplication {
public static void main(String[] args) {
SpringApplication.run(AuthServerLdapApplication.class, args);
}
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
@Configuration
protected static class ActiveDirectoryConfig extends WebSecurityConfigurerAdapter {
@Value("${activedirectory.url}")
private String activeDirectoryUrl;
@Value("${activedirectory.domain}")
private String getActiveDirectoryDomain;
@Autowired private AuthenticationManager authenticationManager;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(getActiveDirectoryDomain,
activeDirectoryUrl);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
auth.authenticationProvider(provider);
auth.parentAuthenticationManager(authenticationManager);
}
}
}
基本上,当我点击UI服务器时,会得到这样的结果:
<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>
如果对授权服务器执行此操作:
curl -v http://localhost:9004/uaa/login
* Trying ::1...
* Connected to localhost (::1) port 9004 (#0)
> GET /uaa/login HTTP/1.1
> Host: localhost:9004
> User-Agent: curl/7.44.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Cache-Control: no-store
< Pragma: no-cache
< WWW-Authenticate: Bearer realm="null", error="unauthorized", error_description="Full authentication is required to access this resource"
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 01 Dec 2015 12:38:53 GMT
<
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}* Connection #0 to host localhost left intact
看起来登录endpoint现在需要一个承载令牌?我不知道现在该怎么办。。。
如有任何帮助/建议,将不胜感激。。。
您@EnableResourceServer
,但您没有为要保护的资源提供任何规则,因此它正在尝试保护所有内容。您需要添加类型为ResourceServerConfigurerAdapter
的@Bean
,并设置请求匹配器(以及您需要的任何其他规则)。
我们正在尝试找出IPC身份验证和授权的最佳实践。我会解释的。我们有一个基于微服务的体系结构SaaS和一个专门的认证服务。该服务负责执行身份验证和管理身份验证令牌(JWT)。 现在的问题是如何验证和授权由其他服务发起的请求(没有特定用户的上下文)? 我们是否应该为每个服务生成一个专用用户,并像对待系统中的任何其他用户一样对待它(具有适当的权限)? 我们是否应该在服务之间部署“硬编码”/动态令牌? 还
问题内容: 是否可以在Android应用程序中使用JAAS? 在android API 中,该包的大多数类都在说 旧版安全代码;不使用。 但是,Android上以用户为中心的JAAS可以替代吗?或者,如果我手动部署,可能会起作用吗? 问题答案: JAAS并不真正适用于Android。JAAS为基于Java的应用程序提供了以用户为中心的安全性(身份是通常正在运行应用程序的“用户”,例如LDAP用户I
我有一个移动(本机)和Web应用程序(SPA),它与后端微服务(在核心2.0中开发)对话,以进行身份验证/授权和其他与域相关的功能,该功能已使用Opendi的配置。这两个应用程序都获得了访问令牌。我遇到的问题是,所有微服务都应该接受无记名访问令牌和登录用户的身份验证/授权(中央身份验证服务),在身份验证微服务中生成的访问令牌(开放身份验证2.*)。那么,我在微服务中缺少哪些更改,其中REST AP
以下是不同的情况: 我的微服务A接收通过API网关并携带有效访问令牌的最终用户发起的请求(JWT,其作用域/声明对应于最终用户:用户名、id、电子邮件、权限等)。这个案子没问题。微服务拥有处理请求的所有信息。 第一个问题:如果微服务A需要调用微服务B会发生什么? null null 例如,微服务B中被调用的方法需要用户id才能工作。用户id值可以设置为查询字符串。如果使用用户访问令牌调用该方法,则
OAuth术语已经困扰我很久了。OAuth授权是像一些人建议的那样,还是认证? 如果我错了,请纠正我,但我一直认为授权是允许某人访问某个资源的行为,而OAuth似乎没有任何实际允许用户访问给定资源的实现。OAuth实现所讨论的都是为用户提供一个令牌(签名的,有时是加密的)。然后,每次调用都会将该令牌传递到后端服务endpoint,在后端服务endpoint上检查该令牌的有效性,这也不是OAuth的
我有一个已经完成的j2ee(jsf、cdi、jpa)应用程序,它完美地使用了ApacheShiro,它工作得非常好,我喜欢Shiro注释(hasRole、hasPermission等)。 现在,该项目还必须能够通过SiteMinder进行身份验证,我的问题是: 我如何设置一个领域来处理SiteMinder身份验证而不丢失Shiro授权(似乎SiteMinder会在HTTP头中给我用户名和Rolen