从第三方应用程序验证并显示Azure AD安全Web App视图

时间:2018-02-22 13:39:35

标签: asp.net-mvc azure authentication azure-active-directory azure-web-app-service

背景 我有一个MVC 5 Web应用程序,并作为Web App托管在Azure App Service中,并以Azure AD保护;任何拥有有效AD凭据的人都可以对自己进行身份验证并查看Web App中的所有HTML内容;

目标 我需要将这些MVC-View中的一个提供给外部个人来查看。为此,我们已经在Azure AD中创建了一个用户,我们将与外界分享详细信息。因此,第三方需要编写一些代码来对我们的Azure AD进行身份验证,并以非交互方式查看此HTML内容(这意味着不允许第三方应用程序提示从Azure AD输入用户凭据)。

我的想法

  

假设我是第三方,我将从Console / WinForms / HTML向Azure AD进行身份验证   页面并获得一个令牌;然后我将使用令牌打开   浏览器以查看此页面。

我看到的挑战 会话到期 会话有效性

将所有内容放入图片 enter image description here

请告诉我完成目标的一些指导。

1 个答案:

答案 0 :(得分:1)

  

因此,第三方需要编写一些代码来对我们的Azure AD进行身份验证并查看此HTML内容非交互式(这意味着不允许第三方应用提示输入用户凭据Azure AD)。

根据我的理解,您可以使用client_idclient_secret来利用OAuth 2.0 Client Credentials Grant Flow

另外,您可以使用OAuth 2 Resource Owner Password Credentials grant注意:资源所有者密码授予不提供同意,也不支持MFA。详细教程,您可以关注here

根据Web App中的身份验证实现部分,您可以按照以下方法实现您的方案:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            Audience = "{the-AAD-clientId}",
            Tenant = "{TenantId}"
        });

//app.UseCookieAuthentication
//app.UseOpenIdConnectAuthentication

对于客户端(第三方),他们可以利用上述两个流(客户端凭证授权流,资源所有者密码凭证授予流)来检索访问令牌而无需用户交互。然后,他们可以使用令牌访问特定的视图页面,如下所示:

Get https://{your-app-name}.azurewebsites.net/home/index
Header Authorization:Bearer {the-AAD-accessToken-or-IdToken}

要检索令牌,您可以按照此tutorial使用用户密码凭据流。对于Client Credential,您可以在调用ClientCredential获取令牌时构造AcquireTokenAsync实例。

此外,您可以为此方案创建新的AAD应用程序,或者仅将AAD应用程序用于当前的Web App。此外,在暴露用户名和用户时可能存在风险。密码或clientId&对于第三方的ClientSecret,我建议您公开一个新的端点,用于在Web App后端生成令牌,并将令牌返回给第三方以便安全考虑。