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

时间:2014-11-14 03:21:22

标签: c# azure odata odata-v4

我尝试使用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);
    }
  }
}

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

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 Client .cs文件

这是我第一次使用有效的odata,但我需要保护我的API。

由于

1 个答案:

答案 0 :(得分:0)

要在OData Client中使用基本身份验证,您可以通过

在DataServiceContext中设置凭据
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");
    };