[英]Doorkeeper Revoke Token
我正在我的應用程序中實現OAuth 2,我已經有登錄/刷新令牌,但我遇到了一些注銷問題。
我有這套由門衛生成的路線:
Routes for Doorkeeper::Engine:
authorization GET /authorize(.:format) doorkeeper/authorizations#new
authorization POST /authorize(.:format) doorkeeper/authorizations#create
authorization DELETE /authorize(.:format) doorkeeper/authorizations#destroy
token POST /token(.:format) doorkeeper/tokens#create
applications GET /applications(.:format) doorkeeper/applications#index
POST /applications(.:format) doorkeeper/applications#create
new_application GET /applications/new(.:format) doorkeeper/applications#new
edit_application GET /applications/:id/edit(.:format) doorkeeper/applications#edit
application GET /applications/:id(.:format) doorkeeper/applications#show
PUT /applications/:id(.:format) doorkeeper/applications#update
DELETE /applications/:id(.:format) doorkeeper/applications#destroy
authorized_applications GET /authorized_applications(.:format) doorkeeper/authorized_applications#index
authorized_application DELETE /authorized_applications/:id(.:format) doorkeeper/authorized_applications#destroy
我想要做的是撤銷服務器中的令牌,所以我認為我必須調用的服務是“刪除/授權”嗎? 但我嘗試了許多不同的方式來使用這些服務,我只重新調整錯誤。
順便說一句,我不知道在服務器中撤銷令牌或僅從應用程序中刪除令牌是否正確?
PS:我在iOS 7中使用AFNetworking 2作為我的客戶端。
這並沒有真正回答這個問題,而是提供相關信息。
我遇到了這樣的問題:在對有效用戶/密碼組合進行任何事先授權之后,門衛會在資源所有者密碼憑證授權請求中驗證任何用戶/密碼組合。 情景是:
結果是Warden將授權用戶保留在會話中,我的iOS客戶端很高興為我維護會話。
我通過讓warden在驗證后立即注銷用戶來解決這個問題。 這是有效的,因為在授權請求中,OAuth會使用授權令牌獲取當前用戶。 它不需要讓用戶進入會話。
以下是config / initializers / doorkeeper.rb。 最后兩行在授權后進行注銷。
# called for Resource Owner Password Credentials Grant
resource_owner_from_credentials do
request.params[:user] = {:email => request.params[:username], :password => request.params[:password]}
request.env["devise.allow_params_authentication"] = true
user = request.env["warden"].authenticate!(:scope => :user)
env['warden'].logout
user
end
如果我找到你正確的問題是1)用戶進入客戶端應用程序,單擊登錄2)客戶端應用程序從oauth-server獲取身份驗證。 此時用戶被要求輸入用戶名/密碼3)用戶點擊客戶端應用程序中的注銷4)用戶在客戶端應用程序中再次單擊登錄,並使用舊的經過身份驗證的令牌自動簽入,而不是再次請求用戶名和pw,這是你想要什么。
如果這是你的問題,它與cookie有關。 檢查每個請求中發送的cookie。 在我的情況下,我不得不添加一行
cookies.delete '_oauth_server_name_session'
然后它起作用了。 您可以先確認這是一個cookie問題,因為如果您切換瀏覽器(或進入隱身模式),則不會發生這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.