我应该在401错误响应中公开我的身份验证URI吗?

时间:2014-06-10 13:56:27

标签: rest authentication

我在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获得有意义的响应?我找不到关于这个主题的有用的东西。

2 个答案:

答案 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