解決Spring Security OAuth在訪問/oauth/token時候報401 authentication is required
阿新 • • 發佈:2019-02-13
出現這個問題的具體原因一般有以下兩點:
1.在授權的部分我們一般是通過使用自己的login action進行http basic的方式進行授權,而我們在使用Spring Security的時候只對外暴露了登陸的這個介面,就是說其它的介面都在Spring Security的保護範圍內了,包括/oauth的介面。
2.在通過1的post方式授權通過之後使用/oauth/authorize?grant_type=password&username=user&password=pwd&client_id=app&response_type=code&redirect_uri=http://localhost的方式進行授權,這樣是可以的,但是在接下來通過post方式向/oauth/token這個介面獲取access_token的時候,會發現這個時候authentication用的並不是前面授權通過的那個authentication,而是使用的匿名登陸的那個authentication,這樣前面的authentication就無法正常使用,也會因此而得到401 authentication is required。
我們可以通過如下的方式解決這個問題 ,在AuthenticationServerConfig這個配置中,啟用AuthenticationServerSecurityConfiguration的allowFormAuthenticationForClients允許client使用form的方式進行authentication的授權,具體可以參考如下程式碼:
@Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { //enable client to get the authenticated when using the /oauth/token to get a access token //there is a 401 authentication is required if it doesn't allow form authentication for clients when access /oauth/token oauthServer.allowFormAuthenticationForClients(); }