带有 oData V4 客户端生成器的 AADL

本文关键字:AADL oData V4 客户端 带有 | 更新日期: 2023-09-27 18:30:31

我正在尝试使用 Azure Active Diretory Library 来实现 Web 应用程序和 OData V4 WebAPI 之间的身份验证。我使用 SQL 对用户进行身份验证,因此,我不需要使用 AADL 对用户进行身份验证,只需对应用程序进行身份验证即可。我在互联网上看到了几个演示,但没有一个做这种事情。主要问题是我的 Web 应用程序正在使用 OData 客户端生成器,所以我不需要打开 HttpClient 请求来调用我的 API,我只是使用上下文来执行此操作。考虑到这种情况,如何保护我的 odata api 仅供我的 Web 应用程序使用?下面是我的代码的一些示例。

我的一个 odata 控制器

using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.OData;
using VPNUX.Model;
namespace VPNUX.API.Controllers
{
  public class EstadosController : ODataController
  {
    private readonly DB_VPNUX _db = new DB_VPNUX();
    [EnableQuery]
    public IHttpActionResult GetEstados()
    {
        return Ok(_db.ESTADOS);
    }
  }
}

这是我在 Web 应用程序中调用此控制器的方式

public ApiContext ApiContext = new ApiContext(new Uri(ConfigurationManager.AppSettings["ApiUrl"]));
_consultaViewData.PacienteViewData.Estados =
            ApiContext.Estados
                .Select(estado => new ListItem(estado.NOME, estado.ID))
                .ToList();

一切都直接来自我的 OData 客户端.cs文件

这是我第一次使用 odata,它运行良好,但我需要保护我的 API。

谢谢

带有 oData V4 客户端生成器的 AADL

若要在 OData 客户端中使用基本身份验证,可以通过以下方式在数据服务上下文中设置凭据

var serviceCreds = new NetworkCredential("Administrator", "SecurePassword"); 
var cache = new CredentialCache(); 
var serviceUri = new Uri("http://localhost/SimpleService"); 
cache.Add(serviceUri, "Basic", serviceCreds); 
ApiContext.Credentials = cache; 

,或者您可以使用 DataServiceContext.SendingRequest2 设置标头。

ApiContext.SendingRequest2 += (sender, arg) =>
    {
        arg.RequestMessage.SetHeader("HeaderName", "HeaderValue");
    };