14

मेरे पास एक वेब एपीआई प्रोजेक्ट है जो मेरे पहचान सर्वर पर UseJwtBearer प्रमाणीकरण का उपयोग करता है। स्टार्टअप में कॉन्फ़िग विधि इस प्रकार है:एमवीसी -6 बनाम एमवीसी -5 वेब एपीआई में बीयरर प्रमाणीकरण

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    app.UseJwtBearerAuthentication(options => 
    { 
     options.AutomaticAuthentication = true; 
     options.Authority = "http://localhost:54540/"; 
     options.Audience = "http://localhost:54540/"; 
    }); 

    // Configure the HTTP request pipeline. 
    app.UseStaticFiles(); 

    // Add MVC to the request pipeline. 
    app.UseMvc(); 
} 

यह काम कर रहा है, और मैं एक MVC5 परियोजना में एक ही बात करना चाहता हूँ। मैं इस तरह कुछ करने की कोशिश:

वेब एपीआई:

public class SecuredController : ApiController 
    { 
      [HttpGet] 
      [Authorize] 
      public IEnumerable<Tuple<string, string>> Get() 
      { 
       var claimsList = new List<Tuple<string, string>>(); 
       var identity = (ClaimsIdentity)User.Identity; 
       foreach (var claim in identity.Claims) 
       { 
        claimsList.Add(new Tuple<string, string>(claim.Type, claim.Value)); 
       } 
       claimsList.Add(new Tuple<string, string>("aaa", "bbb")); 

       return claimsList; 
      } 
} 

मैं वेब API कॉल नहीं कर सकते हैं विशेषता सेट किया गया है [अधिकृत] (अगर मैं इस तुलना में यह काम कर रहा है निकालने के लिए)

मैंने स्टार्टअप बनाया यह कोड कभी नहीं कहा जाता है और मुझे नहीं पता कि इसे काम करने के लिए क्या बदलना है।

[assembly: OwinStartup(typeof(ProAuth.Mvc5WebApi.Startup))] 
namespace ProAuth.Mvc5WebApi 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      ConfigureOAuth(app); 
      HttpConfiguration config = new HttpConfiguration(); 
      WebApiConfig.Register(config); 
      app.UseWebApi(config); 
     } 

     public void ConfigureOAuth(IAppBuilder app) 
     { 
      Uri uri= new Uri("http://localhost:54540/"); 
      PathString path= PathString.FromUriComponent(uri); 

      OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
      { 
       AllowInsecureHttp = true, 
       TokenEndpointPath = path, 
       AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
       Provider = new SimpleAuthorizationServerProvider() 
      }; 

      // Token Generation 
      app.UseOAuthAuthorizationServer(OAuthServerOptions); 
      app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

     } 

    } 

    public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider 
    { 
     public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
     { 
      context.Validated(); 
     } 

     public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
     { 

      context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 

      var identity = new ClaimsIdentity(context.Options.AuthenticationType); 
      identity.AddClaim(new Claim("sub", context.UserName)); 
      identity.AddClaim(new Claim("role", "user")); 

      context.Validated(identity); 

     } 
    } 

} 

लक्ष्य वेब एपीआई से ग्राहक ऐप से दावों को वापस करना है। बेयरर प्रमाणीकरण का उपयोग कर।
सहायता के लिए धन्यवाद।

+0

मुझे ऐप कहां मिल सकता है .UseJwtBearer प्रमाणीकरण (...)? आपकी प्रोजेक्ट.जेसन और संदर्भों का उपयोग (Startup.cs पर) कैसा दिखता है? –

+0

"माइक्रोसॉफ्ट.एस्पनेट। प्रमाणीकरण। जेडटीबीयर": "1.0.0- *" – Raskolnikov

+0

आपके स्टार्टअप कोड पर नहीं कहा जा रहा है, तो आपको संभवतः एमवीसी 5-अनुरूप वाले न्यूज निर्भरताओं का एक सेट चाहिए। मैं सिर्फ 'OwinStartup' – user326608

उत्तर

7

टीएल; डीआर: आप नहीं कर सकते।

Authority एक ओपनआईडी कनेक्ट सुविधा को संदर्भित करता है जिसे एएसपी.NET 5 में भालू मिडलवेयर में जोड़ा गया है: ओविन/कटाना संस्करण में ऐसी कोई चीज़ नहीं है।

नोट: कटाना के लिए app.UseJwtBearerAuthentication एक्सटेंशन है, लेकिन इसके एएसपी.नेट 5 समकक्ष के विपरीत, यह किसी ओपनआईडी कनेक्ट सुविधा का उपयोग नहीं करता है और इसे मैन्युअल रूप से कॉन्फ़िगर किया जाना चाहिए: आपको जारीकर्ता नाम और प्रमाणपत्र का उपयोग करना होगा टोकन 'हस्ताक्षर को सत्यापित करने: यह कोड [अधिकृत] नियंत्रक में होना चाहिए

IAuthenticationManager AuthenticationManager 
{ 
    get 
    { 
     return Request.GetOwinContext().Authentication; 
    } 
} 

public IHttpActionResult UserRoles() 
{ 
return ok(AuthenticationManager.User.Claims.ToList()); 
} 

: https://github.com/jchannon/katanaproject/blob/master/src/Microsoft.Owin.Security.Jwt/JwtBearerAuthenticationExtensions.cs

0

आप के रूप में दावे प्राप्त कर सकते हैं।

संबंधित मुद्दे