2015-04-24 65 views
2

當用戶需要批准使用OAuth2進行身份驗證的請求時,他們通常會獲得「批准」和「取消」按鈕。OAuth2:如何向OAuth2服務器發送「拒絕」請求?

當用戶點擊「取消」時應該發送什麼?

作爲開發者,當用戶單擊「取消」時,我應該向OAuth服務器發送什麼消息來拒絕請求?

我試過使用grant類型的「拒絕」,但沒有奏效。我知道要發送什麼才能獲得批准,但似乎無法看到我應該發送什麼來讓OAuth服務器對redirect_uri做出響應,並在用戶取消時發生錯誤。

我已閱讀規範和這個不錯的OAuth2 Simplified article,但一直無法看到它。


注意:我沒有在任何地方看到明確的細節。是否假定我的應用程序本身應該管理它?例如,在這種情況下,我的應用不是發佈到OAuth2服務器,而是發佈到自己的redirect_uri

{redirect-url}?error=access_denied&error_description=The+user+clicked+deny 

如果是這樣,這似乎有些奇怪,因爲所有的客戶端實現必須做這項工作,構建與錯誤代碼和原因的URL。

回答

1

我不認爲這是從我所看到的標準的一部分。我認爲這取決於每個OAuth2服務實現者,以確定他們希望如何執行此操作。

例如,oauth2orize是由超人氣Passport節點模塊使用以及使用的OAuth2庫,並執行它,像這樣:

注意:這些鏈接可能指向舊版本的代碼。他們規範化聯繫,以確保它們指向正確的位置代碼:

https://github.com/jaredhanson/oauth2orize/blob/c59aefd14b0fb98f97e3419b8d611c0fb4255c69/lib/middleware/decision.js#L46

https://github.com/jaredhanson/oauth2orize/blob/c59aefd14b0fb98f97e3419b8d611c0fb4255c69/test/middleware/decision.test.js#L75-L83

2

https://tools.ietf.org/html/rfc6749#section-4.1.2.1

如果資源所有者拒絕訪問請求或者如果不是丟失或無效的重定向URI等原因請求失敗,授權服務器通過添加以下參數查詢通知客戶端

HTTP/1.1 302 Found 
Location: https://client.example.com/cb?error=access_denied&state=xyz 
:使用 「應用程序/ x WWW的形式進行了urlencoded」 格式

實施例的重定向URI的部件

在PHP重定向:

<?php 
http_redirect("https://client.example.com/cb", array("error" => "access_denied", "state" => "xyz", "error_description" => "The user clicked deny"), true, HTTP_REDIRECT_FOUND); 
?> 
+0

哎...感謝您的反饋...我試圖找出如何讓主機迴應一個回調url的失敗。我知道這就是它通常以重定向進行響應的方式,但我想知道如何在取消情況下做到這一點。謝謝! –

+0

我更新了我的答案,以PHP –

+0

重定向爲例,再次感謝...你寫的PHP會在OAuth服務器中,對嗎?我明白這一點。我試圖找出的是,如果有一個標準的客戶端請求*拒絕操作的方式,例如像'http:// anyOAuth2Server/authorize?grant = deny'。在任何情況下,我都無法看到「拒絕」按鈕在做什麼。謝謝! –