हम आरईएसटी आधारित सेवाओं के लिए एसटीएस (दावा आधारित प्रमाणीकरण) लागू कर रहे हैं। जब हम आरईएसटी सेवाओं (जेएसओएन के साथ) बनाने का फैसला करते हैं तो कई लोगों में से एक कारण तार पर छोटा पदचिह्न था। एसटीएस के साथ, एसएएमएल टोकन केवल कुछ दावों के साथ दावा करता है कि SAML आकार कुछ के बाइट बन जाता है। अधिकांश आरईएसटी कॉलों के लिए जहां हम ऑब्जेक्ट्स की सूची वापस नहीं कर रहे हैं, प्रतिक्रिया आकार कम 100s बाइट्स है और उन कॉल के लिए यह टोकन बहुत अधिक ओवरहेड लगता है। आप अपनी परियोजनाओं में इस के साथ कैसे निपटाते हैं?SAML टोकन आकार और REST
उत्तर
आप आरईएसटी एंडपॉइंट्स के साथ एसएएमएल टोकन का उपयोग कर सकते हैं, लेकिन अधिकतर आप लोगों को सरल वेब टोकन (एसडब्ल्यूटी) का उपयोग करके पाएंगे। छोटे, सरल, आदि
एसीएस (विंडोज़ एज़ूर प्लैटफार्म में एक्सेस कंट्रोल सर्विस) उदाहरण के लिए इसे लागू करता है।
... या जेडब्ल्यूटी (जेएसओएन वेब टोकन)। एसीएस भी इन का समर्थन करता है। चेक इस अनुच्छेद: JSON Web Token Handler for the Microsoft .NET Framework 4.5 यहाँ नेट 4.5 कि मुद्दों के साथ इस पुस्तकालय का एक उपयोग का उदाहरण है और पुष्टि करता है एक जेडब्ल्यूटी सममित कुंजी आधारित HMAC SHA256 साथ हस्ताक्षर किए।
string jwtIssuer = "MyIssuer";
string jwtAudience = "MyAudience";
// Generate symmetric key for HMAC-SHA256 signature
RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider();
byte[] keyForHmacSha256 = new byte[64];
cryptoProvider.GetNonZeroBytes(keyForHmacSha256);
///////////////////////////////////////////////////////////////////
// Create signing credentials for the signed JWT.
// This object is used to cryptographically sign the JWT by the issuer.
SigningCredentials sc = new SigningCredentials(
new InMemorySymmetricSecurityKey(keyForHmacSha256),
"http://www.w3.org/2001/04/xmldsig-more#hmac-sha256",
"http://www.w3.org/2001/04/xmlenc#sha256");
///////////////////////////////////////////////////////////////////
// Create token validation parameters for the signed JWT
// This object will be used to verify the cryptographic signature of the received JWT
TokenValidationParameters validationParams =
new TokenValidationParameters()
{
AllowedAudience = s_jwtAudience,
ValidIssuer = s_jwtIssuer,
ValidateExpiration = true,
ValidateNotBefore = true,
ValidateIssuer = true,
ValidateSignature = true,
SigningToken = new BinarySecretSecurityToken(keyForHmacSha256),
};
///////////////////////////////////////////////////////////////////
// Create JWT handler
// This object is used to write/sign/decode/validate JWTs
JWTSecurityTokenHandler jwtHandler = new JWTSecurityTokenHandler();
// Create a simple JWT claim set
IList<Claim> payloadClaims = new List<Claim>() { new Claim("clm1", "clm1 value"), };
// Create a JWT with signing credentials and lifetime of 12 hours
JWTSecurityToken jwt =
new JWTSecurityToken(jwtIssuer, jwtAudience, payloadClaims, sc, DateTime.UtcNow, DateTime.UtcNow.AddHours(12.0));
// Serialize the JWT
// This is how our JWT looks on the wire: <Base64UrlEncoded header>.<Base64UrlEncoded body>.<signature>
string jwtOnTheWire = jwtHandler.WriteToken(jwt);
// Validate the token signature (we provide the shared symmetric key in `validationParams`)
// This will throw if the signature does not validate
jwtHandler.ValidateToken(jwtOnTheWire, validationParams);
// Parse JWT from the Base64UrlEncoded wire form (<Base64UrlEncoded header>.<Base64UrlEncoded body>.<signature>)
JWTSecurityToken parsedJwt = jwtHandler.ReadToken(jwtOnTheWire) as JWTSecurityToken;
मुझे उस के साथ एक सममित कुंजी का उपयोग करने की कोई क्षमता नहीं मिल रही है। अटक :-(का प्रकार –
सुनिश्चित नहीं हैं कि मैं समझता हूँ कि तुम क्या मतलब है, लेकिन, अगर, मैं कोड है कि बनाता है, संकेत के एक टुकड़े को दिखाने के लिए मेरा उत्तर ऊपर अद्यतन, एक जेडब्ल्यूटी serializes और फिर रिवर्स प्रक्रिया प्रदर्शन करती है। – Kastorskij
हाँ बिल्कुल सही है जो मुझे चाहिए। धन्यवाद !!! –
ऐसा लगता है कि एसडब्ल्यूटी आगे बढ़ रहा है। जेडब्ल्यूटी भी बचपन में है। ऐसा लगता है कि हमें अब के लिए एसएएमएल से निपटना है। http://startersts.codeplex.com/discussions/242113?ProjectName=startersts –