Получить описание для SAML Authentication Context Class URI

421
31 декабря 2016, 13:33

Создаю 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 и работает успешно, не буду углубляться в подробности, так как суть вопроса другая. Вопрос следующий, имеются строки, которые я прописываю руками, что мне не очень нравится, а именно:

  1. "urn:oasis:names:tc:SAML:2.0:ac:classes:Password" - Authentication Context Class URI
  2. "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;

Если имеются, то откуда я могу их получить?

Answer 1

Решение следующее: создавать 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);

Все работает стабильно.

READ ALSO
Чтение после конца потока невозможно. C#

Чтение после конца потока невозможно. C#

Всем доброго времени суток, столкнулся с проблемой

615
AngularJS + ASP .Net Web Api. В экшен не приходят данные

AngularJS + ASP .Net Web Api. В экшен не приходят данные

Не могу понять почему в экшен не приходят данныеКод JS:

468
PictureBoxImageDrawing

PictureBoxImageDrawing

Привет всемВозникла проблема с использованием стандартного graphics на picturebox

421
Не вызывается метод из другого класса

Не вызывается метод из другого класса

Не могу понять в чем ошибкаЕсть форма UIForm и класс WGen в UIForm вызываю WGen(в конце метода TwiceUsedWord):

392