asp.net mvc - एक साथ भालू टोकन और कुकी प्रमाणीकरण का उपयोग करना




asp.net-mvc asp.net-web-api (2)

आप कुकी पर jwt टोकन जोड़ सकते हैं (यहां मेरा jwt टोकन कुकी नाम "access_token" है) http-only मोड में, और इस तरह एक मिडलवेयर बनाएं

public class JwtCookieMiddleware
{
    private readonly RequestDelegate _next;

    public JwtCookieMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext ctx)
    {
        if (ctx.Request.Cookies.TryGetValue("access_token", out var accessToken))
        {
            if (!string.IsNullOrEmpty(accessToken))
            {
                string bearerToken = String.Format("Bearer {0}", accessToken);
                ctx.Request.Headers.Add("Authorization",bearerToken);
            }
        }
        return this._next(ctx);
    }
}
public static class JwtCookieMiddlewareExtensions
{
    public static IApplicationBuilder UseJwtCookie(this IApplicationBuilder build)
    {
        return build.UseMiddleware<JwtCookieMiddleware>();
    }
}

और आपको स्टार्टअप में मिडलवेयर का उपयोग करने की आवश्यकता है:

app.UseJwtCookie();
app.UseAuthentification();
app.UseMvc();

टोकन कुकी के साथ यह अनुरोध अगर उपरोक्त कोड jwt टोकन को http अनुरोध शीर्षलेख में जोड़ देगा;

मेरे पास एक एकल पृष्ठ ऐप है - एमवीसी 5 एसपीए टेम्पलेट के आधार पर अधिक या कम - प्रमाणीकरण के लिए भालू टोकन का उपयोग करना।

साइट में कुछ पारंपरिक एमवीसी पेज भी हैं जिन्हें सुरक्षित करने की आवश्यकता है, लेकिन कुकी प्रमाणीकरण का उपयोग करना आवश्यक है

Startup.Auth में मैं दोनों प्रकार के प्रमाणीकरण को सक्षम कर सकता हूं:

app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOAuthBearerTokens(OAuthOptions);

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

जबकि मैं वास्तव में जो व्यवहार चाहता हूं वह यह है कि वेबएपीआई कॉल के लिए केवल भालू टोकन का उपयोग किया जाता है, और केवल एमवीसी कॉल के लिए कुकी।

मैं एमवीसी कॉल को एक लॉगिन पेज पर रीडायरेक्ट करना भी चाहूंगा जब अधिकृत नहीं है (कुकी प्रमाणीकरण विकल्प के रूप में सेट करें), लेकिन जाहिर है कि मैं एपीआई कॉल करते समय ऐसा नहीं करना चाहता हूं।

क्या इस प्रकार के मिश्रित मोड प्रमाणीकरण को एक आवेदन के भीतर रखने का कोई तरीका है? शायद पथ / मार्ग फ़िल्टर के माध्यम से?


मुझे लगता है कि मैंने यह काम किया: -

स्टार्टअप.ऑथ ओविन पाइपलाइन को तारित कर रहा है, इसलिए कुकीज़ और टोकन को शामिल करना सही है। लेकिन कुकी विकल्पों में से एक परिवर्तन प्रमाणीकरण प्रकार को निर्दिष्ट करता है जो इसे लागू करना चाहिए:

CookieOptions = new CookieAuthenticationOptions
{
  AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie   
};

तब मुझे केवल टोकन का उपयोग करने के लिए वेबएपीआई को कॉन्फ़िगर करने की आवश्यकता थी:

public static void Configure(HttpConfiguration config)
{
   // Configure Web API to use only bearer token authentication.
   config.SuppressDefaultHostAuthentication();
   config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
}

ऐसा लगता है कि मैं क्या चाहता हूं। वेबएपीआई सिर्फ भालू टोकन और कोई कुकीज का उपयोग नहीं करता है, और कुछ पारंपरिक एमवीसी पेज लॉग इन करने के बाद कुकीज़ का उपयोग करते हैं (प्रमाणीकरण प्रबंधक का उपयोग करके)।





owin