Создаю SecurityToken
с помощью Saml2SecurityToken
следующим образом:
SecurityToken st = new Saml2SecurityToken(
new Saml2Assertion(new Saml2NameIdentifier("localUser"))
{
Statements =
{
new Saml2AttributeStatement(new List<Saml2Attribute>()
{
new Saml2Attribute(
"http://identityserver.thinktecture.com/claims/identityprovider",
"promProvider")
}),
new Saml2AuthenticationStatement(new Saml2AuthenticationContext(
new Uri("urn:oasis:names:tc:SAML:2.0:ac:classes:Password")))
},
Subject = new Saml2Subject(new Saml2NameIdentifier("administrator")) {
SubjectConfirmations = { new Saml2SubjectConfirmation(
new Uri("urn:oasis:names:tc:SAML:2.0:cm:bearer"))}},
SigningCredentials = new SigningCredentials(
new X509AsymmetricSecurityKey(certificate),
SecurityAlgorithms.RsaSha256Signature,
SecurityAlgorithms.Sha256Digest,
new SecurityKeyIdentifier() { new X509RawDataKeyIdentifierClause(certificate) })
}, new ReadOnlyCollection<SecurityKey>(new List<SecurityKey>()), securityToken);
Все это используется для того, чтобы создать прокси сервиса, работающего по протоколу безопасности: WS2007FederationHttpBinding
и работает успешно, не буду углубляться в подробности, так как суть вопроса другая. Вопрос следующий, имеются строки, которые я прописываю руками, что мне не очень нравится, а именно:
"urn:oasis:names:tc:SAML:2.0:ac:classes:Password"
- Authentication Context Class URI"urn:oasis:names:tc:SAML:2.0:cm:bearer"
- Subject Confirmation MethodИмеются ли какие-либо справочники, откуда я могу достать эти строки, к примеру перечисления или классы, в которых это хранится, такого плана:
// "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
var rsaSha256Signature = SecurityAlgorithms.RsaSha256Signature;
// "http://www.w3.org/2001/04/xmlenc#sha256"
var sha256 = SecurityAlgorithms.Sha256Digest;
Если имеются, то откуда я могу их получить?
Решение следующее: создавать SecurityToken
через SecurityTokenDescriptor
с помощью Saml2SecurityTokenHandler
. В этом случае константы не нужны. В результате кода стало меньше и выглядеть код стал приятно:
var saml2SecurityTokenHandler = new Saml2SecurityTokenHandler();
var securityTokenDescriptor = new SecurityTokenDescriptor()
{
TokenIssuerName = "production",
Subject = new ClaimsIdentity("administrator"),
Token = new X509SecurityToken(certificate),
SigningCredentials = new SigningCredentials(
new X509AsymmetricSecurityKey(certificate),
SecurityAlgorithms.RsaSha256Signature,
SecurityAlgorithms.Sha256Digest,
new SecurityKeyIdentifier() { new X509RawDataKeyIdentifierClause(certificate) })
};
var securityToken = saml2SecurityTokenHandler.CreateToken(securityTokenDescriptor);
К решению данного вопроса пришел с помощью советов от пользователя @PavelMayorov, ему отдельное спасибо. А константы так и не нашел, если найду - дополню свой ответ.
Последовал очередному совету по поводу использования X509SigningCredentials
вместо SigningCredentials
и получилось то, что меня устраивает в качестве конечного результата:
var saml2SecurityTokenHandler = new Saml2SecurityTokenHandler();
var securityTokenDescriptor = new SecurityTokenDescriptor()
{
TokenIssuerName = "ibzkh",
Subject = new ClaimsIdentity("administrator"),
Token = new X509SecurityToken(certificate),
SigningCredentials = new X509SigningCredentials(certificate)
};
var securityToken = saml2SecurityTokenHandler.CreateToken(securityTokenDescriptor);
Все работает стабильно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу понять почему в экшен не приходят данныеКод JS:
Привет всемВозникла проблема с использованием стандартного graphics на picturebox
Не могу понять в чем ошибкаЕсть форма UIForm и класс WGen в UIForm вызываю WGen(в конце метода TwiceUsedWord):