有什么办法可以在WIF 4.5上支持JWTSecurityTokenHandler吗?

时间:2016-10-26 17:37:05

标签: c# asp.net-web-api jwt wif

我想在使用WIF 4.5的WebAPI应用程序上支持JWT(Json Web Token)。

我正在使用System.IdentityModel.Tokens.Jwt 5.0.0 nuget包,其JWTSecurityTokenHandler似乎与旧版本的WIF集成。

问题在于处理程序派生Microsoft.IdentityModel.Tokens.SecurityTokenHandler而不是System.IdentityModel.Tokens.SecurityTokenHandler,因为配置部分需要。

因此我得到一个可理解的例外:

Parser Error Message: ID1029: The custom type is not suitable because it does not extend the correct base class.
CustomType: 'System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler, System.IdentityModel.Tokens.Jwt, Version=5.0.0.127, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
BaseClass: 'System.IdentityModel.Tokens.SecurityTokenHandler'

我的配置如下:

<system.identityModel>
        <identityConfiguration>
            <audienceUris>
                <add value="http://localhost:49482/" />
            </audienceUris>
            <securityTokenHandlers>
                <add type="System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler, System.IdentityModel.Tokens.Jwt" />
                <securityTokenHandlerConfiguration>
                    <certificateValidation certificateValidationMode="PeerTrust" />
                </securityTokenHandlerConfiguration>
            </securityTokenHandlers>
        </identityConfiguration>
</system.identityModel>

如何在WIF 4.5上支持JWT?我有什么方法可以使用这个包吗?我做错了吗?

1 个答案:

答案 0 :(得分:2)

此软件包是针对.net标准1.4编写的,该标准不包含System.IdentityModel API,因此该软件包没有与WIF集成。

如果您想通过WIF配置使用System.IdentityModel,则基于https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/94,您需要返回到软件包的3.x版本。

您当然可以编写自己的System.IdentityModel.Tokens.SecurityTokenHandler实现,其中包含Microsoft.IdentityModel.Tokens.SecurityTokenHandle