【问题标题】:Azure AD authentication for ASP.NET MVC and ASP.NET Web APIASP.NET MVC 和 ASP.NET Web API 的 Azure AD 身份验证
【发布时间】:2018-04-24 10:39:40
【问题描述】:

我创建了一个 3 层架构,分别是 ASP.NET MVC、ASP Web APP 和一个 SQL 数据库。

我想使用 Azure AD 身份验证。 我已经在 Azure 中发布了所有应用程序,并使用 Azure 门户将 Azure 身份验证添加到 MVC 应用程序和 Web API。 如果我访问 Web API,它会要求我登录,并且工作正常。

但如果我访问 Web App,由于身份验证错误,它不会从 Web API 获取数据。 显然,我需要做一些事情来允许我的 Web 应用程序将令牌传递给 Web API(使用 ajax jquery 调用 API)。 我需要在 Web API 和 Web 应用程序中进行的最少代码更改是什么?

【问题讨论】:

  • 如果没有代码,我们如何告诉您需要更改多少代码?
  • 好吧,如果您的 API 要求您登录,则说明设置方式不正确。一个 API 应该被其他服务使用,所以不能使用交互式身份验证。您必须在其上配置 Azure AD Bearer 令牌身份验证。不确定门户的东西是否可以做到,可能需要修改代码以在此处添加身份验证。

标签: asp.net-mvc web-services azure asp.net-web-api


【解决方案1】:

如果您的代码已经通过 webapi 与 Azure AD 一起使用,那么您无需编写太多代码或进行更改即可使其与 mvc 应用程序一起使用。 参考这里:http://www.dotnetcurry.com/windows-azure/1123/secure-aspnet-mvc-azure-using-active-directory-signon

另外,如果您可以分享一些代码 sn-p,其他人将很容易以更好的猜测回答您的问题 :)

【讨论】:

  • 嗨,Manish,感谢您的意见。我可以单独登录到 MVC 应用程序,但是当我尝试使用 Azure AD 将 MVC 的身份验证集成到 Web API 时出现问题。我的代码依赖于数据库,因此由于安全原因无法共享,但我的问题通常是针对 Azure 的端到端身份验证。
【解决方案2】:

正如 juunas 所说,您的 Web API 不需要提供交互式身份验证,它只需要验证令牌。对于您的 Web API,您只需使用中间件Microsoft.Owin.Security.ActiveDirectory 进行身份验证,详细信息您可以关注Azure AD .NET Web API getting started

对于您的 ASP.NET MVC 项目,您可以使用Microsoft.Owin.Security.OpenIdConnect 中间件进行身份验证,详细信息您可以关注Integrate Azure AD into a web application using OpenID Connect

要使用 AAD 和 OpenID Connect 在 ASP.NET MVC 中调用受 Azure AD 保护的 Web API,您可以按照详细教程 Calling a web API in a web app using Azure AD and OpenID Connect

或者您可以只使用 Azure 应用服务提供的内置Authentication and authorization in Azure App Service 进行身份验证和授权。对于一种简单的方法,您可以为 MVC Web 应用程序和 Web API Web 应用程序创建一个 AAD 应用程序。此外,您可以为您的 MVC 和 Web API Web 应用创建每个 AAD 应用,并为您的 MVC aad 应用设置相关权限以访问 Web API aad 应用,并且您需要手动将 resource 登录参数设置为客户端 ID您的 Web API aad 应用在您的 MVC Web 应用的 App Service Auth 配置下,您可以关注此issue 的详细信息。

【讨论】:

  • 谢谢朱纳斯,布鲁斯。实际上我之前提到过所有这些链接,但我认为使用 VS 2017,我们不需要手动更新 web config 或 startup.cs 文件。当我在 VS 2017 中启用单点登录时能够做到这一点。我想要下面的东西,客户端应用程序中的代码。将尝试回复:blogs.msdn.microsoft.com/jpsanders/2017/03/17/…
  • 您提供的教程使用 ADAL 库和客户端凭据授予流 (ClientId,ClientSecret) 来获取用于访问受保护资源的令牌,而无需用户交互。我建议您阅读 Authentication scenarios for Azure AD 以选择正确的 OAuth 流程以满足您的要求。
【解决方案3】:

感谢大家的帮助。它现在对我有用。

我按照以下步骤操作: 1. 使用 VS 2017“连接服务”选项为 Web App 和 API 生成 Azure AD 代码。 2.在Web App中添加代码以获取Web API的令牌,如下所示 https://blogs.msdn.microsoft.com/jpsanders/2017/03/17/accessing-azure-app-services-using-azure-ad-bearer-token-2/ 3. 将两者都部署为 Azure 中的 Web 应用程序 4. 更新了config client id,client secrete,resource client id等,成功了。

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2015-09-17
    • 2015-05-15
    • 2014-06-02
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多