我有一个使用此控制器的rails应用程序:
class EpisodesController < ApplicationController
before_action :authenticate
def index
episodes = Episode.all
render json: episodes, status: 200
end
protected
def authenticate
authenticate_or_request_with_http_token do |token, options|
User.find_by(auth_token: token)
end
end
end
如果我发送此卷曲请求,我会使用这些标题返回此响应:
$ curl -IH "Authorization: Token token=fake" http://localhost:3000/episodes.json
HTTP/1.1 401 Unauthorized
Content-Type: text/html; charset=utf-8
WWW-Authenticate: Token realm="Application"
www-authenticate标头用于什么?这只是惯例吗?什么是realm =“应用程序”用于?我读到了这个:
令牌部分表示给定资源使用令牌 认证。该URI下的资源目前是其中的一部分 “应用”领域。领域值允许受保护的资源 划分为不同的保护空间集,每个保护空间都有 自己的访问政策。
但我不明白......
答案 0 :(得分:7)
WWW-Authenticate
标题必须包含在401个未经授权的回复中(请参阅HTTP 1.1 RFC),因此这不仅仅是一个惯例。
使用该值可以指示支持哪种身份验证机制(在本例中为Token
,另一个身份验证方案可以为Basic
进行基本身份验证)。领域可以设置为您想要的任何值,并应标识安全区域。如果是基本身份验证,则此值将显示在登录对话框中。