簡體   English   中英

門衛撤銷令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM