5

Wir implementieren STS (Claim-basierte Authentifizierung) für die REST-basierten Services. Einer der Gründe für die Entscheidung, REST-Services (mit JSON) zu erstellen, war der geringe Platzbedarf. Mit STS, dem SAML-Token mit nur wenigen Ansprüchen, wird die SAML-Größe zu wenigen K Bytes. Bei den meisten REST-Aufrufen, bei denen keine Liste mit Objekten zurückgegeben wird, ist die Antwortgröße niedrig und beträgt bei diesen Aufrufen zu viel Aufwand. Wie gehen Sie in Ihren Projekten damit um?SAML-Token-Größe und REST

Antwort

0

Sie können SAML-Token mit REST-Endpunkten verwenden, häufiger finden Sie jedoch auch Benutzer, die Simple Web Tokens (SWT) verwenden. Kleiner, einfacher usw.

ACS (Zugriffssteuerungsdienst in Windows Azure PLatform) implementiert dies zum Beispiel.

+0

Es sieht nicht so aus, als ob SWT voranschreitet. JWT ist auch in den Kinderschuhen. Es scheint, als müssten wir uns jetzt mit SAML auseinandersetzen. http://starterts.codeplex.com/discussions/242113?ProjectName=starterts –

2

... Oder JWT (JSon Web Token). ACS unterstützt diese auch. Überprüfen Sie diesen Artikel: JSON Web Token Handler for the Microsoft .NET Framework 4.5 Hier ist ein Anwendungsbeispiel für diese Bibliothek mit. NET 4.5, die eine JWT ausgestellt und validiert mit HMAC SHA256 mit symmetrischem Schlüssel signiert.

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; 
+0

Ich kann anscheinend keine Möglichkeit finden, einen symmetrischen Schlüssel mit diesem zu verwenden. Art von stecken :-( –

+1

Nicht sicher, ich verstehe, was meinst du, aber, nur für den Fall, aktualisierte ich meine Antwort oben, um ein Stück Code zu zeigen, erstellt, signiert, serialisiert ein JWT und führt dann den umgekehrten Prozess. – Kastorskij

+0

Ja Perfekt, genau das, was ich brauchte. Danke !!! –