Использование обработчика Microsoft Jwt с симметричным ключом подписи с использованием потока владельца ресурса Oauth 2

Я пытаюсь использовать поток владельца ресурса OAuth 2 для авторизации мобильного клиента в отношении моих служб Web Api. Я использую Thinktecture IdentityServer для выпуска токена jwt с симметричным ключом подписи.

На стороне клиента я использую Thinktecture IdentityModel, чтобы настроить проверку токена. Мой WebApiConfig выглядит так:

        var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();

        var mapping = new AuthenticationOptionMapping
        {
            // where to look for credentials
            Options = AuthenticationOptions.ForAuthorizationHeader("bearer"),

            // how to validate them
            TokenHandler = new SecurityTokenHandlerCollection { jwtSecurityTokenHandler },

            // which hint to give back if not successful
            Scheme = AuthenticationScheme.SchemeOnly("bearer")
        };
        var authConfig = new AuthenticationConfiguration(){RequireSsl = false};
        authConfig.AddMapping(mapping);
        config.MessageHandlers.Add(new AuthenticationHandler(authConfig));

В моем IdentityModel.config у меня есть следующее:

<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="PresentationHost.Claims.MobileClaimsAuthorizationManager, PresentationHost"/>
<audienceUris>
  <add value="http://localhost:22674/" />
</audienceUris>

<securityTokenHandlers>
  <add type="System.IdentityModel.Tokens.JwtSecurityTokenHandler, System.IdentityModel.Tokens.Jwt" />
</securityTokenHandlers>

<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
  <authority name="http://identityserver.v2.thinktecture.com/trust/auth">
    <keys>
      <add symmetricKey="tVNRmpweBgz3xeWvSXrSwLIE3DrxJ3aawgNxZKC1Od0"/>
    </keys>
    <validIssuers>
      <add name="http://identityserver.v2.thinktecture.com/trust/auth" />
    </validIssuers>
  </authority>
</issuerNameRegistry>

<issuerTokenResolver type="System.IdentityModel.Tokens.NamedKeyIssuerTokenResolver, System.IdentityModel.Tokens.Jwt"/>
  <securityKey symmetricKey="tVNRmpweBgz3xeWvSXrSwLIE3DrxJ3aawgNxZKC1Od0" name="http://identityserver.v2.thinktecture.com/trust/auth" />


<!--certificationValidationMode set to "None" by the the Identity and Access Tool for Visual Studio. For development purposes.-->
<certificateValidation certificateValidationMode="None" />

В основном взято из этой ссылки на http://leastprivacy.com/2013/07/16/identityserver-using-ws-federation-with-jwt-tokens-and-symmetric-signatures/, который я нашел в этом сообщении о переполнении стека: Как настроить MIcrosoft JWT с симметричным ключом?

Я попытался использовать производный класс, как указано в этом посте, но когда я попытался запустить эту строку:

var resolver = (NamedKeyIssuerTokenResolver)this.Configuration.IssuerTokenResolver;

Я получаю InvalidCastException, потому что IssuerTokenResolver имеет тип X509CertificateStoreResolver, а не тип NamedKeyIssuerTokenResolver.

Похоже, мне все еще не хватает чего-то в моей конфигурации или коде, чтобы правильно настроить TokenResolver. У кого-нибудь есть мысли?


person Joshua Peterson    schedule 18.07.2013    source источник
comment
Почему бы вам не использовать мои методы расширения конфигурации jwt?   -  person leastprivilege    schedule 19.07.2013
comment
@leastprivacy Честно говоря, потому что я не знал о них. Я смотрю на них сейчас, и они могут быть большим подспорьем. Я заставил обработчик jwt работать, переключившись на сертификаты x509 вместо симметричных ключей подписи и подкласса класса JwtSecurityTokenHandler для правильной настройки TokenValidationParameters. Я посмотрю, как использовать ваши методы для дальнейшего совершенствования моего решения. Спасибо.   -  person Joshua Peterson    schedule 19.07.2013