Мы используем STS (аутентификация на основе утверждений) для служб на основе REST. Одной из причин среди многих, когда мы решили создать службы REST (с JSON), была небольшая занимаемая площадь над проводом. С помощью STS токен SAML с несколькими утверждениями требует, чтобы размер SAML составлял несколько килобайт. Для большинства вызовов REST, где мы не возвращаем список объектов, размер ответа невелик в 100 байтов, и для этих вызовов этот токен кажется слишком большим накладным. Как вы относитесь к этому в своих проектах?Размер токена SAML и REST
ответ
Вы можете использовать маркеры SAML с конечными точками REST, но чаще всего вы обнаружите людей, использующих Simple Web Tokens (SWT). Меньше, проще и т. Д.
ACS (Служба контроля доступа в Windows Azure PLatform) реализует это, например.
... или 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;
Кажется, я не вижу возможности использовать симметричный ключ с этим. Вид застрял :-( –
Не уверен, что я понимаю, что вы имеете в виду, но на всякий случай я обновил свой ответ выше, чтобы показать фрагмент кода, который создает, подписывает, сериализует JWT, а затем выполняет обратный процесс. – Kastorskij
Да Отлично, что мне нужно. Спасибо! –
- 1. Обмен JSON для токена SAML
- 2. Формат токена SAML?
- 3. Создание пользовательского токена SAML
- 4. Чтение атрибутов SAML из токена SAML
- 5. Чтение SAML-токена в ASP.NET
- 6. SAML и фоновая аутентификация REST службы
- 7. Использование токена SAML с веб-службой (wsdl)
- 8. Получение ошибки при дешифровании токена Saml
- 9. Размер идентификаторов токена, используемых в аутентификации REST API Desire2Learn?
- 10. Поиск токена SAML через Apache cxf & spring WS
- 11. Каков максимальный размер токена JWT?
- 12. Рекомендации по внедрению SAML в службах REST
- 13. Использование Spring SAML для служб REST
- 14. Spring Security с SAML токен для REST службы
- 15. Ошибка перенаправления Javascript и SAML
- 16. Возврат SAML-токена с пользовательским классом из MVC4 WebApi STS
- 17. Передача токена SAML в службу WCF из Asp.Net
- 18. Проверка токена SAML на уровне службы данных WCF
- 19. Общий пользовательский API-интерфейс токена Java SAML 2.0
- 20. Создание токена с Rest-Framework-Jwt
- 21. Сравнение соленого токена и токена
- 22. Множественная аутентификация токена в платформе Django Rest
- 23. django rest framework - авторизация аутентификации токена
- 24. Аутентификация на основе токена REST API
- 25. Проверка SWT-токена REST WCF-служба
- 26. Чтение содержимого токена JWT в службе REST
- 27. WCF Rest Аутентификация на основе токена
- 28. REST Аутентификация с именем пользователя и паролем для получения токена
- 29. API-интерфейсы PingFederate и PingAccess REST с использованием токена авторизации
- 30. WCF Web Service и Data Service с использованием SAML
Не похоже, что SWT движется вперед. JWT также находится в зачаточном состоянии. Похоже, нам приходится иметь дело с SAML. http://startersts.codeplex.com/discussions/242113?ProjectName=startersts –