2

我想从Azure上托管的ASP.NET Web Apps中使用一些旧式.NET .NET ASMX Web服务。旧服务使用Active Directory Windows身份验证(更新)进行身份验证,但ASP.NET Web Apps使用Azure AD进行身份验证。允许Azure AD Web应用程序调用期望Windows身份验证令牌的那些ASMX Web服务的最佳选择是什么?在Azure AD和Windows Auth/AD之间转换令牌

以下是我今天设置ASMX服务的方式。在web.config中:

<authentication mode="Windows" /> 

还有模拟开启:

<system.web><identity impersonate="true"></identity> 

的Web服务的代码中使用Windows身份验证其代码内部,其重要的是我们能够解决正确的Windows身份。以下是我们如何引用用户的主体:

System.Security.Principal.WindowsIdentity.GetCurrent().Name 

新的Web应用程序使用Microsoft OWIN进行身份验证设置。我们在Azure AD中创建了一个应用程序。因此,我们所拥有的所有内容都是来自Web App中的Azure AD的声明。

更新:它看起来像我的配置信息有点关闭。我们没有使用ADFS,我们在ASMX服务中使用了直接的Windows身份验证。

更新2:我已经尝试设置Azure AD应用程序代理以将声明转换为本机传统Web服务所需的Windows身份验证令牌。

因此,而不是使这里的电话:

https://myServer/MyServices/MyService.asmx

当我在浏览器访问该网址,我得到了标准的Windows身份验证登录,输入我的凭据,我可以使用ASMX服务线束来调用服务方法。

我现在做这个网址拨打电话:

https://mystuff.msappproxy.net/MyServices/MyService.asmx

有趣的是,当我去这个网址,我重定向到Azure的AD和登录,然后我可以使用服务方法。当我监视HTTP流量时,我注意到当我调用我的Web服务时,Cookie正在附加到请求中。

AzureAppProxyAccessCookie_ {GUID} _1.1

然而,当我使用Azure的AD身份验证的网站,它使JavaScript调用到MyService.asmx Web服务,我得到一个HTTP 302发现一个URL如下所示:

https://login.live.net/ {guid}/oauth2/authorize?RESPONSE_TYPE = id_token &的client_id = {GUID} & REDIRECT_URI = https://mystuff.msappproxy.net/MyServices/MyService.asmx

看来它试图做到这一点,但也许通过Azure的AD发给我的Web应用程序的令牌是不是会被翻译成令牌Azure的AD应用代理可以使用?

UPDATE 3:

为了隔离问题进一步我试图创建一个样品的Ajax获取具有硬编码的HTML编码的请求主体请求。我在其中一个玩过的POC应用程序中创建了示例jQuery调用。但在浏览器的控制台中获取重定向CORS错误: https://mystuff.msappproxy.net/

这是我从Web应用程序中创建的独立javascript调用。

function GetASMX() 
{ 
    $.ajax({ 
     url: "https://mystuff.msappproxy.net/MyServices/MyService.asmx/DoSomething?parameter=[stuff]", 
     type: 'GET', 
     xhrFields: { 
      withCredentials: true 
     }, 
     crossDomain:true, 
     success: function (e) { 
      alert('Api App Returns: ' + e); 
     } 
    }); 
} 

在ASMX端启用CORS。我需要找出为什么会发生这种情况。看起来这可能是related

回答

0

没有明显的办法。在高层次上,如果您具有对ADFS的管理访问权限,则可以使用Azure AD租户设置身份提供商信任:这将为您提供遍历信任链的机会,以便您的Azure AD用户可以交换Azure AD令牌ADFS之一。 这就是理论。为了进入实施阶段,您需要更多关于您当前使用的协议的详细信息来保护对ASMX服务的呼叫。如果您只是简单地制作受Cookie保护的ajax callas,那么应该很容易适应 - 您只需再向Azure AD重新定向一次即可。但是如果你正在使用ws-security和ws-trust,那么你遇到了麻烦。 Azure AD的公共表面都不支持这两种协议,并且在任何情况下,这些协议都不能提供处理两个提供者之间的联合流的明确方式。

+0

Hi Vittorio!谢谢回复。当我意识到我的一些信息有点偏离时,我更新了我的问题。我不确定新信息是否会使我想要做的更容易或更困难:)基本上,旧的Web服务使用的是常规的旧Windows身份验证,而不是ADFS。对于那个很抱歉。 – emseetea

+0

您是否认为这可能是我可以使用Azure AD应用程序代理的场景? – emseetea