HTTP 다이제스트 인증을 기반으로 사용자를 인증하는 루비 애플리케이션 용 API를 만드는 중입니다. Grape API 라이브러리를 사용하기로 결정한 이유는 Ruby에서 API 클리너를 생성하기 때문입니다. 포도 문서는 다이제스트 인증처럼 사용할 수있는 상태 :포도 API 및 HTTP 다이제스트 인증
위의 포도 구현은Rack::Auth::Digest::MD5
의 래퍼 지금 또한 보안을 위해 내가 RFC 2617의 당신이 저장하지 않아도 읽을 수있다
http_digest({ :realm => 'Test Api', :opaque => 'app secret' }) do |username|
# lookup the user's password here
{ 'user1' => 'password1' }[username]
end
영역 : 당신은 사용자 이름의 MD5 다이제스트를 저장하는 데이터베이스에 일반 텍스트로 암호가에 대한 암호 authticate 그래서 나는 DataMapper 모델 생성 : 지금이 제공하는 것과
class Key
include DataMapper::Resource
property :id, Serial
property :username, String
property :password, String
property :active, Boolean, :default => true
property :created_at, DateTime, :default => DateTime.now
property :updated_at, DateTime
end
을 나는 방법으로 손실입니다 이들을 연결하는 우와 그것을 작동하게하십시오.
[Rack Digest MD5] (https://github.com/rack/rack/blob/master/lib/rack/auth/digest/md5.rb)를 둘러보고 난 후에'attr_writer : passwords_hashed' 'true'로 설정되면'username : realm : password' 형식으로 이미 해시 된 암호를 받아 들일 것입니다.이 암호는 Grape API 래퍼에서 해당 속성을 설정하는 데 문제가 있습니다. 어떤 제안? – ny95
포도 코드를 살펴보면': realm, : opaque, : passwords_hashed' 키가 포함 된': realm' 심볼에 해시를 제공 할 수 있습니다. . . Grape에서는 문서화되지 않았거나 테스트되지 않았으므로 원하는 뒷문이 약간 있습니다.나는 그것을 테스트했지만, 그것은 나를 위해 작동하지 않았다. –
나는 무슨 일이 일어나는지 보려고 노력할 것입니다. 불투명 한 값에 대해서는 무엇이 중요합니까, 예를 들어'SecureRandom.hex (15)'로 설정할 수 있습니까? – ny95