5

Мы используем STS (аутентификация на основе утверждений) для служб на основе REST. Одной из причин среди многих, когда мы решили создать службы REST (с JSON), была небольшая занимаемая площадь над проводом. С помощью STS токен SAML с несколькими утверждениями требует, чтобы размер SAML составлял несколько килобайт. Для большинства вызовов REST, где мы не возвращаем список объектов, размер ответа невелик в 100 байтов, и для этих вызовов этот токен кажется слишком большим накладным. Как вы относитесь к этому в своих проектах?Размер токена SAML и REST

ответ

0

Вы можете использовать маркеры SAML с конечными точками REST, но чаще всего вы обнаружите людей, использующих Simple Web Tokens (SWT). Меньше, проще и т. Д.

ACS (Служба контроля доступа в Windows Azure PLatform) реализует это, например.

+0

Не похоже, что SWT движется вперед. JWT также находится в зачаточном состоянии. Похоже, нам приходится иметь дело с SAML. http://startersts.codeplex.com/discussions/242113?ProjectName=startersts –

2

... или JWT (JSon Web Token). ACS также поддерживает их. Проверьте эту статью: JSON Web Token Handler for the Microsoft .NET Framework 4.5 Вот пример использования этой библиотеки с .Net 4.5, который выдает и проверяет JWT, подписанный на основе симметричного ключа 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; 
+0

Кажется, я не вижу возможности использовать симметричный ключ с этим. Вид застрял :-( –

+1

Не уверен, что я понимаю, что вы имеете в виду, но на всякий случай я обновил свой ответ выше, чтобы показать фрагмент кода, который создает, подписывает, сериализует JWT, а затем выполняет обратный процесс. – Kastorskij

+0

Да Отлично, что мне нужно. Спасибо! –

Смежные вопросы