[C#] एमवीसी में वेब एपीआई एथ टोकन से उपयोगकर्ता विवरण निकालें


Answers

Question

मैं एक webapi प्रोजेक्ट का उपयोग कर रहा हूँ जैसे कि मेरे auth सर्वर और संसाधन सर्वर इरादा एक एंड्रॉइड ऐप के रूप में सर्विसेज का उपयोग करना है। मुझे एक वेब फ्रंट एंड भी चाहिए जो एक एमवीसी ऐप में लिखा जा रहा है। मैं मूल रूप से डिफ़ॉल्ट MVC ऑथेट का इस्तेमाल किया था लेकिन वेब पै में टोकन को सौंपने के लिए ले जाया गया है मैं auth टोकन के लिए वेबपिया सेवा प्राप्त कर सकता हूं और मैं कुकी में क्लाइंट को टोकन भेज रहा हूं, हालांकि मैं सिर्फ कैश कर सकता हूँ क्लाइंट साइड है मेरे पास वर्तमान में निम्न OAuthBearerAuthenticationProvider चल रहा है:

public class CookieOAuthBearerProvider : OAuthBearerAuthenticationProvider
{
    public override Task RequestToken(OAuthRequestTokenContext context)
    {
        base.RequestToken(context);
        var value = context.Request.Cookies["AuthToken"];
        if (!string.IsNullOrEmpty(value))
        {
            context.Token = value;
        }
        return Task.FromResult<object>(null);
    }    
}

और मेरे स्टार्टअप क्लास में मुझे यह विधि है:

private void ConfigureAuth(IAppBuilder app)
    {

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
        {

            Provider = new CookieOAuthBearerProvider(),

        });
    }

जो मैं कॉन्फ़िगरेशन विधि में कॉल करता हूं।

जो मुझे लगता है कि गायब हो रहा है वह है कि मैं कैसे अपने टोकन को लॉग इन उपयोगकर्ता में परिवर्तित करने के लिए टैप कैसे करूं? मैं समझ नहीं पाया कि deserializtion कहां होता है मैंने अपने configueAuth को बदलने के लिए कोशिश की है:

private void ConfigureAuth(IAppBuilder app)
    {

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
        {

            Provider = new CookieOAuthBearerProvider(),
            AccessTokenProvider = new AuthenticationTokenProvider()
            {

                OnReceive = receive
            }
        });
    }

    public static Action<AuthenticationTokenReceiveContext> receive = new Action<AuthenticationTokenReceiveContext>(c =>
    {
        c.DeserializeTicket(c.Token);
        c.OwinContext.Environment["Properties"] = c.Ticket.Properties;
    });

और मेरे प्राप्त विधि को बुलाया जा रहा है। AuthenticationTokenReceiveContext मेरे टोकन संलग्न है लेकिन DeserializeTicket रिक्त लौट रहा है। क्या किसी को यह सलाह मिल सकती है कि यूज़र विवरण प्राप्त करने के लिए मैं कौन से गुम हूँ?

नीचे सुझाए गए सुझावों के अनुसार अद्यतन करें Statrup कोड और OAuthBearerAuthenticationOptions अब इस तरह से पसंद है:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

    private void ConfigureAuth(IAppBuilder app)
    {

        OAuthOpt = new OAuthBearerAuthenticationOptions()
        {

            Provider = new CookieOAuthBearerProvider(),
            AccessTokenProvider = new AuthenticationTokenProvider()
            {

                OnReceive = receive
            }
        };
        app.UseOAuthBearerAuthentication(OAuthOpt);
    }

    public static Action<AuthenticationTokenReceiveContext> receive = new Action<AuthenticationTokenReceiveContext>(c =>
    {
        var ticket = OAuthOpt.AccessTokenFormat.Unprotect(c.Token);

    });

    public static OAuthBearerAuthenticationOptions OAuthOpt { get; private set; }
}

लेकिन मैं अभी भी एक शून्य मूल्य प्राप्त कर रहा हूँ। क्या मैं OAuthBearerAuthenticationOptions पर कुछ प्रासंगिक विकल्प गायब हो सकता हूं?




Links