Full authentication is required to access this resource Unauthorized
在于某银行app对接用户时,对方接口提供了获取accesstoken,方式是通过post进行提交数据,都是基于oauth协议来完成。
例如接口地址:https://test_Id:test_secret@test.com/oauth/authorize
再拿到接口后,肯定要测试一下是否能获取结果,所以就使用了在线post提交请求,模拟获取数据,结果能够成功,想着应该不会有问题,就开发写代码。
但是通过代码时无法获取数据,一直返回401状态,Unauthorized,错误消息:Full authentication is required to access this resource。
不管如何设置,包括请求头部、编码、json、form表单提交等,都是一样的错误,但是在浏览器里模拟就成功了。
返回错误消息:
{ "timestamp":1510558350024,"status":401,"error":"Unauthorized", "message":"Full authentication is required to access this resource", "path":"/oauth/authorize" }
怎么解决呢?
我们先看一下给的连接地址,此url明显有2个符合(: @),查询了一下,发现其实就是一个账户和密码登陆,而我们在浏览器里操作,浏览器默认会自动解析登陆,那代码如何写呢?
解决办法:
var tokenRequestParams = new SortedDictionary<string, string> { {"type", "authorization"} }; var content = new FormUrlEncodedContent(tokenRequestParams); var handler = new HttpClientHandler { Credentials = new NetworkCredential("test_Id", "test_secret")//账户、密码 }; var httpClient = new HttpClient(handler); var data = httpClient.PostAsync("https://test_Id:test_secret@test.com/oauth/authorize", content);
NetworkCredential:可以在网络中提供一个凭证,只有获得该凭证的用户才能访问相应的服务的权限,关键就是在这个地方。