我在REST API中使用OAuth 2,如果我的访问令牌无效,我的API会返回401错误。 我的401响应现在没有意义,我想知道我是否可以在我的响应中放置我的身份验证URI?像
这样的东西{
"error": 401,
"authentication_uri": "https://example.com/login?client_id=123&response_type=token&redirect_uri=http://example.com/app/"
}
我能这样做吗?这样安全吗? (似乎所有这些参数都暴露在URL中......)是否有其他常用方法可以从401获得有意义的响应?我找不到关于这个主题的有用的东西。
答案 0 :(得分:1)
我不是安全专家,但我没有看到这样做的问题。我不知道隐藏如何进行身份验证的任何价值,并且我没有看到你暴露他们没有的任何东西(假设client_id和redirect_uri在原始请求中)。
答案 1 :(得分:0)
回答我自己的问题:虽然事先可以做到并且有好处,因为你不需要事先知道身份验证URI,但它有一些陷阱。
假设您在http://localhost
单独开发多个应用程序,并且您希望传达相同的REST API。 REST API不能仅从您的Referer或Origin标头字段中推断出client_id
,因为它总是http://localhost
。你可以开发" App 1"或者" App 2"并且每个都有不同的client_id
。因此,您需要支持URI templates。 E.g:
{
"error": 401,
"authentication_uri": "https://example.com/login?redirect_uri=http://localhost&response_type=token{&client_id}"
}
有关URI模板的更多示例,请参阅here。