سؤال

بعد قراءة المقالة MSDN (http://msdn.microsoft.com/en-us/magazine/2009.01.genevests.aspx) على تنفيذ مخصص STS باستخدام Microsoft جنيف الإطار أنا في حيرة قليلا عن واحد من السيناريوهات التي غطت هناك.هذا السيناريو هو مبين في الشكل رقم 13 من المادة المشار إليها أعلاه.

أسئلتي هي حول كيف RP بدء الدعوة إلى RP-STS من أجل تمرير حصلت بالفعل على مطالبات من IP-STS ؟ كيف الطريقة المطلوبة DeleteOrder() يتحول إلى مطالبة طلب العمل المطالبة من RP-STS الذي يستجيب مع العمل المطالبة مع حذف القيمة التي يخول الدعوة ؟ أعتقد أيضا أن هذا الرقم هو قليلا غير صحيحة في أن التفاعل بين RP-STS وسياسة المحرك يجب أن يكون المطالبات والسهام العكس.

أستطيع أن أرى هيكل ولكن ليس من الواضح ما تقدمه جنيف/WCF و ما الذي ينبغي القيام به في التعليمات البرمجية داخل RP, الذي قد يبدو غريبا بعض الشيء لأننا لا يمكن أن تحمي DeleteOrder الأسلوب مع PrincipalPermission الطلب على حذف "إذن" إلا أن الطلب الدور الأول ثم الحصول على غرامة الحبيبات مطالبة حذف العمل بعد هذه النقطة.

إذا كنت قد غاب عن النقطة (منذ أن كنت لا يمكن العثور على هذه الحالة تغطيتها بسهولة على شبكة الإنترنت) ، ثم الاعتذار!

شكرا مقدما.

هل كانت مفيدة؟

المحلول

سألت نفس السؤال في منتدى جنيف في http://social.msdn.microsoft.com/Forums/en/Geneva/thread/d10c556c-1ec5-409d-8c25-bee2933e85ea?prof=required و حصلت على هذا الرد:

مرحبا Dokie,

كنت أتساءل نفس الشيء عندما قرأت تلك المقالة.لقد فكرت كيف مثل هذا السيناريو لن تنفذ ، لقد جئت w/ فكرتين:

  1. RP هو في الواقع تكوين تتطلب المطالبات من RP-STS;RP-STS يتطلب رمز الأمان من IP-STS.ونتيجة لذلك ، عندما تخضع طلبات الموارد من RP, أنه مستبعد منه أن RP-STS الذي يرتد منه IP-STS.بعد مصادقة هناك ارتدت إلى RP-STS هوية تتمحور حول مطالبات تتحول إلى تلك اللازمة لجعل قرار الترخيص وعاد إلى RP.

  2. RP تكوين اعتراضية (على سبيل المثال ، AuthorizationPolicy إذا كانت خدمة WCF) أن يستولي على المكالمة ، يرى الهوية تتمحور حول مطالبات يخلق RST (باستخدام WSTrustClient), يمررها إلى RP-STS ، أن توسع الخدمة المطالبات إلى واحدة جديدة التي يتم إرجاعها إلى RP ، RP يجعل قرار الترخيص.

لم ينفذ هذا ، ولكن ، إذا كنت تنوي ، أود أن استكشاف هذين أفكار أخرى.

HTH!


التحيات ،

ترافيس سبنسر

لذلك سأحاول الخيار 2 أولا ونرى ما اذا كان يعمل بها ثم صياغة إجابة هنا.

نصائح أخرى

ولقد حصلت تعمل بشكل جيد حالة واحدة. في حالتي AD FS هو خدمة الهوية والعرف STS STS على الموارد.

واستخدام كل تطبيق الويب في نفس STS الموارد، ولكن بعد قيام المستخدم تزور تطبيق آخر المطالبات الهوية releated لا addad مرة أخرى من قبل FS AD منذ مصادقة المستخدم بالفعل. كيف يمكنني إجبار أو طلب المطالبات الأساسية من FS مرة أخرى؟ AD

ولقد خلق استدعاء FS AD مع ActAs، والآن يعود المطالبات هويتي. تذكر لتمكين وفد يسمح الحكم للأوراق الاعتماد المستخدمة للاتصال FS AD.

string stsEndpoint = "https://<ADFS>/adfs/services/trust/2005/usernamemixed";
     var trustChannelFactory = new WSTrustChannelFactory(new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), stsEndpoint);

     trustChannelFactory.Credentials.UserName.UserName = @"DELEGATE";
     trustChannelFactory.Credentials.UserName.Password = @"PASSWORD";

     trustChannelFactory.TrustVersion = TrustVersion.WSTrustFeb2005;

     //// Prepare the RST.
     //var trustChannelFactory = new WSTrustChannelFactory(tokenParameters.IssuerBinding, tokenParameters.IssuerAddress);
     var trustChannel = (WSTrustChannel)trustChannelFactory.CreateChannel();

     var rst = new RequestSecurityToken(RequestTypes.Issue);

     rst.AppliesTo = new EndpointAddress(@"https:<RPADDRESS>");

     // If you're doing delegation, set the ActAs value.
     var principal = Thread.CurrentPrincipal as IClaimsPrincipal;
     var bootstrapToken = principal.Identities[0].BootstrapToken;

     // The bootstraptoken is the token received from the AD FS after succesfull authentication, this can be reused to call the AD FS the the users credentials
     if (bootstrapToken == null)
     {
        throw new Exception("Bootstraptoken is empty, make sure SaveBootstrapTokens = true at the RP");
     }

     rst.ActAs = new SecurityTokenElement(bootstrapToken);

     // Beware, this mode make's sure that there is no certficiate needed for the RP -> AD FS communication
     rst.KeyType = KeyTypes.Bearer;

     // Disable the need for AD FS to crypt the data to R-STS
     Scope.SymmetricKeyEncryptionRequired = false;

     // Here's where you can look up claims requirements dynamically.
     rst.Claims.Add(new RequestClaim(ClaimTypes.Name));
     rst.Claims.Add(new RequestClaim(ClaimTypes.PrimarySid));

     // Get the token and attach it to the channel before making a request.
     RequestSecurityTokenResponse rstr = null;
     var issuedToken = trustChannel.Issue(rst, out rstr);
     var claims = GetClaimsFromToken((GenericXmlSecurityToken)issuedToken);

 private static ClaimCollection GetClaimsFromToken(GenericXmlSecurityToken genericToken)
  {
     var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;
     var token = handlers.ReadToken(new XmlTextReader(new StringReader(genericToken.TokenXml.OuterXml)));
     return handlers.ValidateToken(token).First().Claims;
  }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top