2017-05-29 66 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

相关问题