By default WCF uses symmetric encryption for token validation. However in our situation we were using a custom STS that created bearer tokens. This means that we don’t provide any proof about our identity.
When we tried to use the token to call a WCF service we got the following error message:
The signing token Generic XML token:
validFrom: 10/31/2016 10:52:49
validTo: 10/31/2016 11:52:49
InternalTokenReference: SamlAssertionKeyIdentifierClause(AssertionId = '_129cb505-83f0-4af0-a455-c51b51926d3a')
ExternalTokenReference: SamlAssertionKeyIdentifierClause(AssertionId = '_129cb505-83f0-4af0-a455-c51b51926d3a')
Token Element: (Assertion, urn:oasis:names:tc:SAML:1.0:assertion)
has no keys. The security token is used in a context that requires it to perform cryptographic operations, but the token contains no cryptographic keys. Either the token type does not support cryptographic operations, or the particular token instance does not contain cryptographic keys. Check your configuration to ensure that cryptographically disabled token types (for example, UserNameSecurityToken) are not specified in a context that requires cryptographic operations (for example, an endorsing supporting token).
Here is the related code:
Problem was that in the binding I forgot to explicitly mention that the provided token type is a Bearer token, making WCF fallback to the default token validation. Let’s fix this: