Bir Web API uygulamasıyla görüşen ve kimlik doğrulaması için ADFS 2.0 (Windows 2008 R2'de) kullanan bir MVC Web Uygulaması yapmak istiyorum.ADFS 2.0 Windows 2008 R2 Web API'si
MVC Web Uygulamasını, ADFS kullanarak kimlik doğrulaması yapmayı başardım.
S: Ancak, ADFS 2.0 (Windows 2008 R2'de) MVC Web'den Web API'ye nasıl dağıtımı yapmam gerektiğini bilmiyorum (ayrı sunucularda dağıtılacağını varsayarak)?
Ben, R2 ancak Windows Server 2008 R2
Düzenleme Web API ve ADFS'de 2.0 ile WCF veya Windows Server 2012 ile bunu nasıl çok makale bulundu Sonunda ben poor man delegation için gittim (arka ucun arka ucuna aldığım aynı belirteci geçerek (tekrar adfs'ı çağırmak mantıklı olmaz)
FrontEnd -> GetToken'i arayın ve yetkilendirmeyi yapın. başlık (onu kodlarım base64 için)
public string GetToken()
{
BootstrapContext bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as BootstrapContext;
string token = bootstrapContext.Token;
if (string.IsNullOrEmpty(token))
token = ToTokenXmlString(bootstrapContext.SecurityToken as SamlSecurityToken);
return token;
}
string ToTokenXmlString(SecurityToken token)
{
var genericToken = token as GenericXmlSecurityToken;
if (genericToken != null)
return genericToken.TokenXml.OuterXml;
var handler = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection();
return ToTokenXmlString(token, handler);
}
string ToTokenXmlString(SecurityToken token, SecurityTokenHandlerCollection handler)
{
if (!handler.CanWriteToken(token))
throw new InvalidOperationException("Token type not suppoted");
var sb = new StringBuilder(128);
using (StringWriter stringWriter = new StringWriter(sb))
{
using (var textWriter = new XmlTextWriter(stringWriter))
{
handler.WriteToken(textWriter, token);
return sb.ToString();
}
}
}
Backend-> Ayrıştırma ve I web API çağrısı yetkilendirme başlığına adfs alınan taşıyıcı belirteci geçirerek bu uygulamaya
public ClaimsIdentity GetIdentityFromToken(string tokenBase64)
{
if (string.IsNullOrEmpty(tokenBase64))
return null;
byte[] tokenByteArray = Convert.FromBase64String(tokenBase64);
string decodedToken = Encoding.UTF8.GetString(tokenByteArray);
if (string.IsNullOrWhiteSpace(decodedToken))
return null;
try
{
var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
SecurityToken token;
using (StringReader stringReader = new StringReader(decodedToken))
{
using (XmlTextReader xmlReader = new XmlTextReader(stringReader))
{
token = handlers.ReadToken(xmlReader);
}
}
if (token == null)
return null;
return handlers.ValidateToken(token).FirstOrDefault();
}
catch (Exception e)
{
logger.Error(new AuthenticationException("Error validating the token from ADFS", e));
return null;
}
}
> Belirteci
sorun JWT simge gönderir ADFS 2008 R2 yapamaz yani, bazen bc.Token boş. Eğer ilgilenirseniz kullandığım çözüm için düzenlemeye bakın –