2012-09-20 53 views
6

Şu anda, widgets satan bir MVC web uygulamasına sahibim. Bir kullanıcı, form kimlik doğrulamasını kullanarak sistemimize giriş yapar ve daha sonra ait oldukları gruba göre çeşitli işlevler yapabilir (örn. Sipariş ver, Siparişi göster, Siparişi iptal et, vb.)..NET WebApi Kimlik Doğrulaması

Üçüncü taraflara sistemimizdeki siparişleri oluşturma ve görüntüleme yeteneği verecek bir Api yazmakla görevlendirildik. Her üçüncü tarafın kendi kullanıcı adı olacaktır ve ait oldukları gruba dayanan belirli API yöntemleri ile sınırlı olacaktır.

Web Api'yi api'yi sağlamak için bir mekanizma olarak kullanmak istiyoruz. Bu API'yı MVC web uygulamasından da kullanabilmeyi isterdik. Maalesef, Web Api için Kimlik Doğrulama ile ilgili sorunlara bakıyoruz. Bir DelegatingHandler kullanarak, WebApi'miz için SSL üzerinden Temel Kimlik Doğrulama uyguladık. Bu üçüncü taraflarımız için harika çalışıyor. Ancak, MVC uygulamasından Api'yi kullanmaya çalışırken 401 erişim reddedildi, çünkü kullanıcı Forms kimlik doğrulaması kullanarak MVC uygulamasında kimliği doğrulandı, ancak bu kimlik bilgilerini Web Api'ye aktarmanın hiçbir yolu yok. Form Auth kimlik bilgilerini MVC uygulamasından Web api uygulamasına iletmenin bir yolu var mı? İki web uygulamaları

    WidgetStore \ UI form kimlik -uses
  • WidgetStore \ Api

    ile WidgetStore adında

    IIS Kurulumu WebSitesi - kullandığı temel kimlik doğrulama

+0

Formlar/Temel yetkisizlik sorununuzu çözmek için, bu harika makaleyi Dominick Baier'den okuyabileceğinizi öneririm: [Formlar/Temel kimlik doğrulama talepleri] (http://leastprivilege.com/2012/10/24/ uzantıları-web-apimvc-formsbasic-auth-örnek-iddialar-dönüşüm-ve-ajax /) – Swell

cevap

9

bir yolu var mı Form Auth kimlik bilgilerini MVC uygulamasından Web api uygulamasına geçirin mi?

[Authorize] 
public ActionResult CallWebApi() 
{ 
    var baseAddress = new Uri("https://example.com"); 
    var cookieContainer = new CookieContainer(); 
    using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) 
    using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) 
    { 
     var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName].Value; 
     cookieContainer.Add(baseAddress, new Cookie(FormsAuthentication.FormsCookieName, authCookie)); 
     var result = client.GetAsync("/api/values").Result; 
     result.EnsureSuccessStatusCode(); 

     // now you can read the result.Content ... 
    } 
} 

Bu aynı zamanda Web API projesinin web.config'de ve bu form kimlik doğrulaması etkin varsayar:

Tabii, Web API çağırma örneğin aşağıdaki MVC denetleyicisi işlem yapmanızı sağlayan Çerez adı, MVC projenizde kullanılanla aynıdır.

+0

Cevabınız için teşekkürler. Ancak, Web API projemin web.config dosyasında FormsAuthentication'ı etkinleştirirsem, üçüncü tarafların kimlik doğrulaması yapamaz. WebApi'ye bağlanmak için BASIC kimlik doğrulamasını kullanırlar ve artık çalışmayacaktır. Üçüncü taraflar FormsAuth çerezine sahip olmayacak – user1686249

+0

Ancak temel form kimlik doğrulamasında temsilci nasıl görünüyor? Şöyle görünüyorsa, form kimlik doğrulamasını etkinleştirme konusunda sorun yaşamayacaksınız: http://stackoverflow.com/a/11536349/29407 –