2015-02-26 15 views
6

OAuth etkinleştirilmiş bir uygulama konsepti için basit bir kanıt oluşturmaya çalışıyorum ancak yetki kodu uygulamasında takılıyorum. Okuduğum her yer, bir şekilde ya da başka bir şekilde gittiği gibi, aslında yetki kodu akışını kullanmıyor gibi görünüyor. Ben bilgi için aşağıdaki kaynakları kullanarak oldum:OWIN Middleware'i kullanarak Web Api'de OAuth2 Authorization_Code Flow'u nasıl uygularım?

Ben kurulum web API var ve özel bir OAuthAuthorizationServerProvider ile Owin yenileme için şifre hibe türlerini kabul belirteçleri ve bir erişim belirteci için bir yenileme belirteci değiştirme yeteneği. Bu iyi çalışıyor, ancak bir yetkilendirme koduyla istemciye yetkilendirmek ve yeniden yönlendirmek için bir tarayıcıyı sunucuya yönlendirdiğim bir senaryo oluşturmak istiyorum. Ardından istemcinin bir yenileme belirteci

'u almak için yetki kodunu gönderilmesini istiyorum. Web Sunucusu Uygulamaları altındaki ikinci bağlantıda, web api uygulamamın bir istekte bir yetkilendirme kodunu yansıtmasını sağlamaya çalışıyorum gibi http://127.0.0.1/auth?response_type=code&client_id=123&redirect_uri=http://validredirect.com&scope=access ama almaya devam bir 404.

ben şöyle Owin yapılandırılmış ettik

:

var databaseContext = new AdnsfContext(); 

WebApp.Start(
    new StartOptions("http://127.0.0.1:7000"), 
    appBuilder => 
    { 
     var httpConfig = new HttpConfiguration(); 
     httpConfig.MapHttpAttributeRoutes(); 
     httpConfig.SuppressDefaultHostAuthentication(); 
     httpConfig.Filters.Add(new HostAuthenticationFilter("Bearer")); 

     appBuilder 
      .UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions 
       { 
        AllowInsecureHttp = true, 
        ApplicationCanDisplayErrors = true, 
        AuthorizeEndpointPath = new PathString("/auth"), 
        TokenEndpointPath = new PathString("/token"), 
        AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1), 
        AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(1), 
        Provider = new AuthServerProvider(), 
        AuthorizationCodeProvider = new AuthorizationCodeProvider(), 
        RefreshTokenProvider = new RefreshTokenProvider(), 
       }) 
      .UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions 
       { 
        AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active, 
        AuthenticationType = "Bearer", 
       }) 
      .UseCors(CorsOptions.AllowAll) 
      .UseWebApi(httpConfig); 
    }); 

Ben yetkilendirme uç noktasını etkinleştirmek için ekledik adet kimlik doğrulama sunucusu seçenekleri için özellikler şunlardır:

AuthorizeEndpointPath = new PathString("/auth"), 
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1), 
AuthorizationCodeProvider = new AuthorizationCodeProvider(), 

AuthorizationCodeProvider benim uygulamamdaki geçersiz kılmalar istisnalar uygulamıyor, ancak şu anda kodda ayarlanmış herhangi bir kesme noktasına çarpmıyor. Unutulmaması gereken bir nokta, postacıyı auth uç noktasına vurmak için kullandığımda, HTTPAPI/2.0 için bir sunucu üstbilgisi alıyorum ki, bu uç noktasında sadece bir şey bulunmadığından farklı bir sunucu başlığı alıyorum, yani isteği gönderiyorum yanlış. Kurulumumda bir sorun olan var mı? Şimdiden teşekkürler, bunun açıkça OWIN ve OAuth'u anlamada başarısız olduğumu biliyorum.

cevap

3

IdentityServer'a bakın. Owin'e dayanıyor. Ayrıca, kendi kendini temsil eden ve \ veya 3. taraf kimlik sağlayıcılarını kullanarak çok sayıda örnek bulabileceğiniz samples repository da var.

this one örneğinin sizin için en uygun olduğunu düşünüyorum. Katana inşa OAuth2 yetkilendirme sunucusu ile nota

+0

IdentityServer mükemmel bir kaynaktı. Orijinal oauth2 spce, IdentityServer ve orijinal olarak bağladığım örnek yetkilendirme sunucusu ile birlikte, bunu anlayabildim. –

+3

@JoshuaBelden Son çözümünüzü cevap olarak gönderebilir misiniz? Ya da en azından anlamlı kısımları? –

3

Bir şey şeffaf olmasıdır: Eğer sağlamalıdır kendi/yetkilendirme son nokta (örneğin MVC veya Nancy kullanarak) veya doğrudan OAuthAuthorizationServerProvider.AuthorizationEndpoint içinde onay formunu işlemek

Sen tam bir örnek için https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc bir göz alabilir. Katana'da yerleşik OAuth2 yetkilendirme sunucusunu değil, OpenID Connect'i hedefleyen çok daha fazla detaylandırılmış bir çatalı kullanmıyor, ancak bu fikri almalısınız.

İlgili konular