Сценарий для STS с симметричным ключом подписи для проверяющей стороны

Пожалуйста, помогите мне понять следующий сценарий:

Веб-приложение запрашивает токен у STS. STS - это сервер Thinktecture Identity v2. STS настроен со следующим:

Общая конфигурация

Только одна проверяющая сторона

И для веб-приложения, и для STS установлены доверительные отношения путем установки необходимых сертификатов.

Веб-приложение использует протокол WS-Trust для запроса токена, используя следующий код:

WSTrustChannelFactory factory = new WSTrustChannelFactory(new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
                                         string.Format(WS_TRUST_END_POINT, identityServer));

            string relyingParty = "urn:test:symmetric";
            factory.TrustVersion = TrustVersion.WSTrust13;
            factory.Credentials.UserName.UserName = username;
            factory.Credentials.UserName.Password = password;

            RequestSecurityToken rst = new RequestSecurityToken
            {
                RequestType = RequestTypes.Issue,
                KeyType = KeyTypes.Bearer,
                TokenType = TokenTypes.JsonWebToken,
                AppliesTo = new EndpointReference(relyingParty), 
            };

            GenericXmlSecurityToken xmlToken = factory.CreateChannel().Issue(rst) as GenericXmlSecurityToken;
            handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
            SecurityTokenHandlerCollection jwtToken = handlers.ReadToken(new XmlTextReader(new StringReader(xmlToken.TokenXml.OuterXml))) as JwtSecurityToken;

var Identity = handlers.ValidateToken(jwtToken);

Приложение web.config выглядит следующим образом:

<system.identityModel>
      <identityConfiguration saveBootstrapContext="true">
        <audienceUris>
          <add value="urn:test:symmetric"/>
        </audienceUris>
        <securityTokenHandlers>
          <add type="System.IdentityModel.Tokens.JwtSecurityTokenHandler, System.IdentityModel.Tokens.Jwt, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
          <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089">
            <sessionTokenRequirement lifetime="00:30:00"/>
          </add>
          <securityTokenHandlerConfiguration>
            <issuerTokenResolver type="System.IdentityModel.Tokens.NamedKeyIssuerTokenResolver, System.IdentityModel.Tokens.JWT">
              <securityKey symmetricKey="JDQLsrFL1VGBj5GZcAo0Xick4stoHyV5ah0B8RDBUoM=" name="TH_STS"/>

            </issuerTokenResolver>
            <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
              <!-- STS Authority Nodes 
        -->
              <authority name="TH_STS">
                <keys>
                  <add symmetricKey="JDQLsrFL1VGBj5GZcAo0Xick4stoHyV5ah0B8RDBUoM="/>
                </keys>
                <validIssuers>
                  <add name="TH_STS"/>
                </validIssuers>
              </authority>


            </issuerNameRegistry>
          </securityTokenHandlerConfiguration>
        </securityTokenHandlers>
      </identityConfiguration>
    </system.identityModel>

Я читаю концепции WIF, но я все еще пытаюсь понять процесс. Правильно ли я понимаю следующее:

  1. Запросы токенов работают по https.
  2. Доверие устанавливается между запросчиком токена (веб-приложение) и STS путем установки соответствующего сертификата.
  3. Веб-приложение запрашивает токен по протоколу WS-Trust, включая сведения об имени пользователя / пароле, проверяющей стороне, keytype= bearer и tokentype = JSonwebtoken.
  4. STS проверяет учетные данные пользователя, создает и отправляет токен JWT. Маркер подписывается с использованием симметричного ключа, настроенного в STS для упомянутой проверяющей стороны. Претензии не зашифрованы.
  5. Получив токен, веб-приложение проверяет токен, проверяя, что он поступает от того же STS, и расшифровывает токен с использованием того же симметричного ключа.

Представленное выше понимание кажется правильным? Я что-то здесь упускаю или здесь что-то не так?

Также вопрос в том, как генерируются симметричные ключи?

0 ответов

Другие вопросы по тегам