Я строю свой собственный STS, который обрабатывает протоколы разных типов (WS-Federation, OAuth и т. Д.).Я застрял с обработкой токена RSTR, который размещен ADFS 2 на моем STS.
Код, который я успешно десериализовал для утверждений, однако мне нужно добавить часть раздела конфигурации microsoft.identityModel, чтобы он работал, и мне нужно добавить сертификат подписи ADFS 2 в хранилище доверенных лиц.
У меня есть свой собственный раздел конфигурации, где я указываю вещи, поэтому использование microsoft.identityModel является избыточным.
Код:
var request = System.Web.HttpContext.Current.Request;
var message = SignInResponseMessage.CreateFromFormPost(request) as SignInResponseMessage;
var rstr = new WSFederationSerializer().CreateResponse(message, new WSTrustSerializationContext());
var serviceConfig = new ServiceConfiguration();
IClaimsIdentity claimsIdentity = null;
using (var reader = XmlReader.Create(
new StringReader(rstr.RequestedSecurityToken.SecurityTokenXml.OuterXml)))
{
var token = serviceConfig.SecurityTokenHandlers.ReadToken(reader);
claimsIdentity = serviceConfig.SecurityTokenHandlers.ValidateToken(token).FirstOrDefault();
}
return claimsIdentity;
Необходимая конфигурация, которую я бы хотел избежать:
<microsoft.identityModel>
<service>
<audienceUris mode="Never">
</audienceUris>
<issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<trustedIssuers>
<add thumbprint="27d3db77a9716ad370a7e9c632d5b98dcc5b1479" name="https://UrlToAdfs/adfs/ls/" />
</trustedIssuers>
</issuerNameRegistry>
</service>
</microsoft.identityModel>