2017-09-13 61 views

回答

0

流程遵循OAuth 2.0標準。請注意我並不是ADFS的專家,但是我很熟悉OAuth 2.0。

授權流程包含具有不同步驟的多個選項。在你的情況下,你正在使用代碼配置文件(指定response_type =代碼)。您所做的授權步驟只是第一步,需要執行幾個步驟

您可以搜索「OAuth 2.0 with ADFS」,例如http://blog.scottlogic.com/2015/03/09/OAUTH2-Authentication-with-ADFS-3.0.html

授權請求

../authorize?RESPONSE_TYPE =代碼& CLIENT_ID = ruleman &資源=甕:ruleman:1個& REDIRECT_URI = http://ruleman.net/authorize

將收到一個OAuth代碼(通常不AVING信息的任何值,這只是一個代碼)

http://ruleman.net/authorize?code=aaaaaaaa.bbbbbbbbb.ccccccccc

碼參數包含權利要求,如用戶名等

這是錯誤的假設

使用此代碼,您需要從後端調用令牌服務以接收訪問令牌(例如,使用HttpClient)。

POST /adfs/oauth2/token HTTP/1.1 

grant_type=authorization_code&client_id=some-uid-or- 
other&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2FgetAToken&code=thecode 

您將收到一個訪問令牌。這一步可以確保您的應用程序真正使用它所瞭解的身份提供程序進行身份驗

根據上面鏈接的帖子:

我們感興趣的是它本身,它其實是一個JSON網絡令牌(JWT)。這就是說用戶身份和其他授權的簽名表示。

我無法確認,但您可以嘗試。通常(與其他身份提供者一起)令牌只是一個令牌,客戶需要調用「用戶信息」服務來獲得任何用戶身份聲明,但似乎ADFS爲您提供了一些捷徑。

然後你可以使用任何JWT庫解碼/驗證JWT令牌(com.auth0/Java的智威湯遜/ 3.0.1)

com.auth0.jwt.interfaces.DecodedJWT jwt = com.auth0.jwt.JWT.decode(token); 
-2

此問題已經回答here

BIG編輯,SORRY:

所引用的答案,你可以解析查詢字符串並提取令牌。

該令牌是JWT,請參閱Microsoft聲明"JWTs are the only supported token type for OAuth requests""The OAuth server implementation in ADFS on Windows Server 2012 R2 will issue only JWTs in response to OAuth authorization requests. This applies to both access tokens as well as refresh tokens issued by ADFS in response to an OAuth authorization grant request. There is no way to turn off this behavior in ADFS."

要解碼JWT令牌,請使用library of your choice,我使用了nimbus(maven:com.nimbusds/nimbus-jose-jwt/4.11)。這樣,所有的字段都可以直接從令牌中獲得。

對不起,我不能評論也不會將您的問題標爲重複,因爲我的信譽低。

+0

該代碼不包含任何聲明/有用信息。它僅用於查詢訪問令牌 – gusto2

+0

@mrq目標不僅是提取令牌,還要解碼令牌本身並檢索聲明。 – Aliaxander

+0

@mrq **代碼不是令牌**。令牌需要通過令牌服務的後端請求。在原始問題中,令牌請求丟失(他只收到一個代碼) – gusto2