मैं एक एमवीसी वेब एप्लिकेशन बनाना चाहता हूं जो वेब एपीआई एप्लिकेशन से बात करता है और प्रमाणीकरण के लिए एडीएफएस 2.0 (विंडोज 2008 आर 2 पर) का उपयोग करता है।एडीएफएस 2.0 विंडोज 2008 आर 2 वेब एपीआई
मैं एमडीसी वेब एप्लिकेशन को एडीएफएस का उपयोग करके प्रमाणित करने में कामयाब रहा।
प्रश्न: लेकिन मुझे नहीं पता कि मुझे एमवीसी वेब से वेब एपीआई में अपने एडीएफएस 2.0 (विंडोज 2008 आर 2 पर) कैसे फेरेट करना चाहिए (मान लीजिए कि वे अलग-अलग सर्वरों में तैनात किए जाएंगे)?
मैं, कैसे WCF या विंडोज सर्वर 2012 R2, लेकिन नहीं वेब एपीआई और ADFS 2.0 Windows Server 2008 R2
संपादित में साथ साथ ऐसा करने पर लेख का एक बहुत कुछ पाया अंत में मैं poor man delegation के लिए गया (उसी बैकन को पास करना जो मुझे बैकएंड के सामने के अंत तक प्राप्त होता है (क्योंकि यह फिर से एडीएफ को कॉल करने के लिए समझ में नहीं आता है)
फ्रंटएंड -> गेटोकोकन कॉल करें और प्राधिकरण पर डालें हेडर (मैं इसे एन्कोड करता हूं बेस 64 के लिए)
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-> पार्स और token->
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;
}
}
समस्या यह है कि आप जेडब्ल्यूटी टोकन भेजने के लिए ADFS 2008 R2 नहीं कर सकता है, और कभी कभी bc.Token रिक्त है। यदि आप रुचि रखते हैं तो मैंने जो समाधान इस्तेमाल किया है, उसके संपादन में देखें –