2016-04-13 16 views
1

Web API 2 REST hizmetimiz var. Temel OWIN oAuth jetonu kimlik doğrulamasını kullanıyoruz ve https gerekiyor. Temel http ile istek yapıldığında bir 403 HTTPS Zorunlu hatasını kontrol eden ve geri gönderen bir RequireHttpsAttribute filtresi ekledik.Web API,/token çağrısı güvenli olmadığında 403 döndürür

Sorun bizim/belirteci isteğidir. Simgemizi istediğimizde 403 hatasını geri döndürmeyeceğiz. Startup.Auth.cs yapılandırma dosyasında AllowInsecureHttp = false değerini ayarladık. Bu, kullanıcıların güvensiz bir çağrı ile bir jeton talep etmesini engeller.

Ancak, bu çağrı yapıldığında 404 HTTPS istediğimiz için 404 Hata Bulunamadı. Bu hatayı düzeltmek için bana yardımcı olan var mı?

RequireHttpsAttribute öğesini kullanmadığımızı fark ediyorum, çünkü bu normal kimlik doğrulamasının dışında bir durumdur, işte bu kimlik doğrulaması için nasıl bir simge alırız. Bu yüzden güvenli bağlantı için nereye bakacağımı bilmiyorum. GrantResourceOwnersCredentials yönteminde AuthenticationOAuthProviders sınıfında denedim. Kullanıcı adını ve şifreyi doğrulamadan önce https için bir kontrol hazırladım ancak oradan bir HTTP Kodu hatası oluşturamadım.

+0

("HTTPS Gerekli: Burada

küçük bir örnektir "," HTTP istek için gerekli "), ancak yine de 400 Hatalı İstek hatası olarak geri geliyor. Context.Response.StatusCode = 403'ü denedim ama görmezden geliyor gibi görünüyor. –

cevap

1

Bir Web API filtresi yerine, Owin boru hattınızın başlangıcında basit bir Owin orta-gereçleri kullanmayı deneyebilirsiniz. Bu sayede uygulamanıza yapılan tüm istekleri yakalayacaksınız.

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.Use(async (ctx, next) => 
     { 
      if (ctx.Request.Scheme.Equals(Uri.UriSchemeHttps)) 
       await next.Invoke(); 
      else 
       ctx.Response.StatusCode = 403; 
     }); 

     //other middlewares 
     //app.UseWebApi(..) 
    } 
} 
isteği kullanılarak context.Request.Uri.Scheme güvenli olup olmadığını GrantResourceOwnerCredentials eylem belirleyebilir ve beni bir context.setError yapmanızı sağlar