प्रदान करके वेबपी से लंबे भालू टोकन से निपटना मैं दावा प्रमाणीकरण का उपयोग कर एएसपी.नेट वेबएपी 2 का उपयोग कर एक वेब एपीआई बना रहा हूं, और मेरे उपयोगकर्ताओं के पास बड़ी संख्या में दावे हो सकते हैं। बड़ी संख्या में दावों के साथ भालू टोकन बहुत तेजी से बढ़ता है, इसलिए मैं बहुत कम भालू टोकन लौटने का एक तरीका खोजने का प्रयास कर रहा हूं।सरोगेट टोकन
अब तक मुझे पता चला है कि मैं OAuth के विकल्प के लिए एक IAuthenticationTokenProvider
OAuthAuthorizationServerOptions.AccessTokenProvider
संपत्ति प्रदान कर सकते हैं:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AccessTokenExpireTimeSpan = TimeSpan.FromHours(12),
AccessTokenProvider = new GuidProvider() // <-- here
};
और यह मुझे AuthenticationTicket
रोकना और इसे दूर भी छिपा सकते, सरल कुछ और इसकी जगह का मौका देता - एक हैश गाइड के नीचे मेरे उदाहरण में। (नोट: फिलहाल इस वर्ग के बस मेरी सत्र के साथ एक ConcurrentDictionary<string,AuthenticationTicket>
रखती है - एक वास्तविक दुनिया उदाहरण में मैं कुछ स्थायी संग्रह में सत्र की दुकान करने का इरादा)
public class GuidProvider : IAuthenticationTokenProvider
{
private static ConcurrentDictionary<string, AuthenticationTicket> tokens
= new ConcurrentDictionary<string, AuthenticationTicket>();
public void Create(AuthenticationTokenCreateContext context)
{
throw new NotImplementedException();
}
public async System.Threading.Tasks.Task CreateAsync(AuthenticationTokenCreateContext context)
{
var guid = Guid.NewGuid().ToString();
var ticket = Crypto.Hash(guid);
tokens.TryAdd(ticket, context.Ticket);
context.SetToken(ticket);
}
public void Receive(AuthenticationTokenReceiveContext context)
{
throw new NotImplementedException();
}
public async System.Threading.Tasks.Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
AuthenticationTicket ticket;
if (tokens.TryGetValue(context.Token, out ticket))
{
if (ticket.Properties.ExpiresUtc.Value < DateTime.UtcNow)
{
tokens.TryRemove(context.Token, out ticket);
}
context.SetTicket(ticket);
}
}
}
तो मेरे सवालों का:
- क्या यह मेरे लंबे दावों से उत्पन्न टोकन के स्थान पर सरोगेट कुंजी प्रदान करने का एक उचित (और सुरक्षित!) तरीका है?
- क्या शायद एक बेहतर/आसान जगह है जहां मुझे इसे वेबपी/ओथ स्टैक के भीतर करना चाहिए? एक ताज़ा टोकन के माध्यम से सिवाय इसके कि वे एक प्रतीत -
नोट करने के लिए एक और बात है कि मैं ताज़ा टोकन का समर्थन करना चाहते हैं, और वास्तव में उपरोक्त उदाहरण जो ताज़ा टोकन के लिए तंत्र की इस तरह का उपयोग उदाहरण से खींचा गया था है उपयोग करें, इसलिए ReceiveAsync
विधि आमतौर पर ConcurrentDictionary
से दी गई ताज़ा टोकन को हटा देगी, मुझे पूरा यकीन नहीं है कि मैं क्यों समझता हूं?
यह दृष्टिकोण ठीक है यदि आपका ग्राहक इस प्राधिकरण को फिर से भेज देगा, तो यदि आप एक्सेस टोकन को संभालने के लिए इस संपर्क का उपयोग करते हैं तो ओएथ 2 में जेट होगा, सही विकल्प नहीं होगा – Saravanan
क्योंकि प्राधिकरण को अलग किया जा सकता है ग्राहक ऐप और आप सरोगेट टोकन से दावा का अनुमान नहीं लगा सकते हैं। – Saravanan
@ jamiec ने जेडब्ल्यूटी का उपयोग करके मेरा जवाब दावे से भरे अपने एक्सेस टोकन को कम करने में मदद की? –