2017-05-29 68 views
5

我一直在使用azure ACS將我的移動客戶端與企業ADFS一起驗證到我的asp.net服務器應用程序。我管理的不僅僅是在網絡瀏覽器中,還在移動應用中使用它(使用webview獲取一個jwt令牌,然後將其發送到服務器進行驗證並生成應用身份驗證令牌)。用於ADFS移動身份驗證的Azure ACS備選

但不幸的是Azure ACS is being discontinued所以我必須尋找替代品。

使用this article我設法讓ADFS auth直接沒有任何外部服務,這對我來說是一個巨大的優勢,因爲一些客戶可能在他們的內部網上有互聯網限制。

這個問題在嘗試爲本地客戶端(Windows WPF,Android和iOS)實現時就開始了,因爲我找不到這些案例的解決方案。

適用於Android和iOS的ADAL seems to require Windows Server 2012 R2。這個限制是一個很大的不是。

我發現第三方認證提供商Auth0但我真的想避免外部服務。

還有Azure B2C身份驗證,但它具有相同的外部服務問題。

有沒有一種方法可以直接在ADFS上實現Azure ACS的功能?我需要的是直接從ADFS獲取jwt令牌(甚至是SAML2令牌)的方法。

回答

0

我爲我的需求創建了一個自定義解決方案。基本上我實現了類似於ACS流程的解決方案。

應用程序在web瀏覽器上加載一個特殊的登錄頁面,將瀏覽器重定向到ADFS質詢頁面,最終回調到我的webapp。在那裏,我被通知的使用JavaScript的ACS一樣調用不通知與令牌應用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 


<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Loading...</title> 
    <script type="text/javascript"> 
     try{ 
      window.external.notify('@ViewBag.Result'); 
     } 
     catch(err){ 
      alert("Error ACS50021: window.external.notify is not registered."); 
     } 
    </script> 
</head> 
<body> 
</body> 
</html> 

這樣,我的應用程序不會直接處理用戶憑據,我不再需要外部服務:)

與ACS不同的是,我可以直接控制最後一步,並且可以通過重定向將令牌導出到可幫助在iOS上實現的自定義協議(在ACS上,我們必須將javascript注入webview中的頁面才能實現此目的)。

0

ACS使用WS-Fed,它是樣本用作協議的東西。

移動設備使用OAuth,這就是爲什麼您需要ADFS 3.0(有限支持)或ADFS 4.0(完全支持加上OpenID Connect)的原因。

如果您只是希望ADFS返回JWT令牌而不是SAML令牌,請參閱此article

設置-ADFSRelyingPartyTrust -TargetIdentifier「甕:MyWebApp」 -EnableJWT $真

然而,這需要ADFS 3.0。

另一種方式是使用WCF。這將調用WS-Fed活動配置文件,該活動配置文件根據此article將SAML令牌作爲Web服務返回。

+0

謝謝,但不幸的是沒有這些替代品真的爲我工作。我受限於ADFS 2.0,WCF替代方案需要我的應用程序知道AD上的用戶憑證,這對於某些客戶來說是一個真正的問題。 – RicardoSBA

+0

是的 - 雖然有WCF流使用證書。 – nzpcmad

相關問題