所以,我认为我已经迷失了大量的方法,因为我对这一切都是新手,但是,我有一个独立的Auth服务器,使用基本的auth进行用户凭据输入。
然后我有一个非常简单的客户端应用程序,该应用程序成功重定向到/oauth/authorize
,然后作为流程的一部分对/oauth/token
和/oauth/check_token
进行后续调用。所以我回来了访问令牌,它看起来不错。
问题是我无法访问UI应用程序中的任何资源,因为它说我没有经过身份验证。我添加了这个以检查控制器中的状态:
SecurityContext ctx = SecurityContextHolder.getContext();
上下文是说我没有经过身份验证(但它确实包含OAuth2Authentication对象,其中包含访问令牌的详细信息等)。
如果我再调试一下,我可以在OAuth2AuthenticationProcessingFilter中看到,它试图通过授权标题从请求中获取持有者令牌(BearerTokenExtractor),但无法找到它;我应该在auth服务器验证后明确设置吗?
我错过了什么?
非常感谢
答案 0 :(得分:0)
这意味着您没有将从OAuth2服务器收到的令牌传递到资源服务器的请求标头中;这是资源服务器可以检查您是否获得授权的机制,然后设置适当的安全上下文。
您应该为资源服务器的任何请求设置以下标头:
Authorization: Bearer {your token}
答案 1 :(得分:0)
丹尼尔,非常感谢你。
我之后有2个问题/问题。
首先,要访问我已标记为需要进行身份验证的同一(客户端)应用中的资源,我才会“拒绝访问”#39;我可以在Chrome中的dev工具中看到JSESSIONID和XSRF令牌。
其次,要访问远程资源,我是否需要使用OAuth2RestTemplate,从会话中获取承载?
非常感谢
马丁
答案 2 :(得分:0)
为了解决这个问题,我解决了两个问题。