1

Azure Active Diretory Library を使用して、Web アプリケーションと OData V4 WebApi 間の認証を実装しようとしています。SQL を使用してユーザーを認証するため、AADL を使用して認証する必要はなく、アプリケーションを認証するだけです。インターネットでいくつかのデモを見ましたが、この種のことを行うものはありません。主な問題は、Web アプリケーションが OData クライアント ジェネレーターを使用しているため、API を呼び出すために HttpClient リクエストを開く必要がないことです。コンテキストを使用するだけです。このシナリオを考慮して、自分の odata API を自分の Web アプリケーションだけが使用できるように保護するにはどうすればよいでしょうか? これが私のコードの例です。

私の odata コントローラーの 1 つ

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 Client .cs ファイルから直接取得されます

うまく機能するodataを使用するのはこれが初めてですが、APIを保護する必要があります。

ありがとう

4

1 に答える 1

0

OData クライアントで基本認証を使用するには、次の方法で 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");
    };
于 2014-12-05T08:10:30.870 に答える