背景
我有一个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进行身份验证 页面并获得一个令牌;然后我将使用令牌打开 浏览器以查看此页面。
我看到的挑战 会话到期 会话有效性
请告诉我完成目标的一些指导。
答案 0 :(得分:1)
因此,第三方需要编写一些代码来对我们的Azure AD进行身份验证并查看此HTML内容非交互式(这意味着不允许第三方应用提示输入用户凭据Azure AD)。
根据我的理解,您可以使用client_id
和client_secret
来利用OAuth 2.0 Client Credentials Grant Flow。
另外,您可以使用OAuth 2 Resource Owner Password Credentials grant。 注意:资源所有者密码授予不提供同意,也不支持MFA。详细教程,您可以关注here。
根据Web App中的身份验证实现部分,您可以按照以下方法实现您的方案:
使用App Service Authentication / Authorization
您无需修改Web App项目中的任何代码。
使用Microsoft.Owin.Security.OpenIdConnect中间件
您可以在Web App中使用Microsoft.Owin.Security.ActiveDirectory包来支持AAD承载令牌身份验证,并且需要在其他身份验证中间件之前配置此中间件,如下所示:
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后端生成令牌,并将令牌返回给第三方以便安全考虑。