Azure ACS替代ADFS移动身份验证

Ric*_*SBA 5 asp.net android adfs2.0 ios jwt

我一直在使用azure ACS来验证我的移动客户端与企业ADFS到我的a​​sp.net服务器应用程序.我设法不仅让它在Web浏览器中运行良好,而且还运行在移动应用程序上(使用webview获取一个jwt令牌,然后将其发送到服务器进行验证并生成应用程序身份验证令牌).

但不幸的是,Azure ACS正在停产,因此我不得不寻找替代方案.

使用这篇文章我设法直接使用ADFS auth,没有任何外部服务,这对我来说是一个巨大的优势,因为一些客户可能在他们的内部网上有互联网限制.

当尝试为本机客户端(Windows WPF,Android和iOS)实现此问题时,问题就开始了,因为我无法找到针对这些情况的解决方案.

适用于Android和iOS的ADAL 似乎需要Windows Server 2012 R2.这种限制是一个很大的禁忌.

我找到了第三方auth提供商Auth0,但我真的想避免外部服务.

还有Azure B2C身份验证,但它有相同的外部服务问题.

有没有办法直接在ADFS上实现Azure ACS的功能?我需要的是一种直接从ADFS获取jwt令牌(甚至SAML2令牌)的方法.

Ric*_*SBA 0

我根据自己的需求创建了一个自定义解决方案。基本上我实现了一个类似于 ACS flow 的解决方案。

这些应用程序在 Web 视图上加载一个特殊的登录页面,该页面将浏览器重定向到 ADFS 质询页面,并最终回调到我的 Web 应用程序。在那里,我通过使用通知 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>
Run Code Online (Sandbox Code Playgroud)

这样我的应用程序将不会直接处理用户凭据,我不再需要外部服务:)

与 ACS 不同的是,我可以直接控制最后一步,并且可以通过重定向将令牌导出到自定义协议,这有助于在 iOS 上实现(在 ACS 上,我们必须将 javascript 注入到 Web 视图中的页面来实现此目的)。