View Full Version : اضافه کردن samlassertion به ws-security header
hmdhamed
چهارشنبه 26 آبان 1389, 13:24 عصر
سلام من یک samlassertion (System.IdentityModel.Tokens.samlassertion) تولید کردم و مقداردهیش کردم. حالا می خوام در ابتدا بتونم مثل یه فایل xml ذخیرش کنم یا به عنوان یه string ذخیرش کنم. بعد می خوام تو ws-security header یک پیغام soap قرارش بدم و برای طرف دیگه بفرستم. Samlassertion یک متد به اسم xmlwriter داره که فکر می کنم باید با اون بشه یه کارایی کرد ولی اصلا از کارش سر در نمیارم.
ضمنا یه کد جاوا گیر اوردم که همچین کاری میکنه ولی تو .net و C# نمیدونم چیکار کنم.
securityElement.appendChild
(soapPart.importNode(samlAssertion.toDOM(), true));
اگه از دوستان کسی میتونه کمک کنه خیلی فوریه.
ضمنا شاید بشه از xmltextWriter هم استفاده کرد. ولی نمی خوام تک تک element ها رو دوباره از assertion استخراج کنم و یکی یکی تو سند xml قرار بدم چون اون وقت اصلا samlassertion تو .net به دردی نمیخوره!
اگه دوستان ایده ای دارن ممنون میشم کمک کنند.
با تشکر.
hmdhamed
پنج شنبه 27 آبان 1389, 17:08 عصر
خوب کسی جواب منو که نداد خودم تا یه جاهایی پیش رفتم فقط مونده تو soap جاگذاریش کنم. مدیران محترم اگه خواستن حذف کنن این تاپیک رو من هر چی گشتم راهی برای حذفش پیدا نکردم!
sia_2007
جمعه 28 آبان 1389, 00:14 صبح
اگه یه Message Inspector بنویسی ؛ به Message به صورت Ref دسترسی داری
حالا هر چی میخوای میتونی توش بذاری؛
public class MessageInspector : IDispatchMessageInspector
{
public void BeforeSendReply(ref Message reply, object correlationState)
{
}
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
return null;
}
}
enable custom inspection or modification of inbound and outbound application messages in service applications
تو کلاسی که Behavior خود End Point ات رو مینویسی ؛ یه Dispatch Behavior تعریف کن به و یه نمونه از Inspector ات رو تو Message Inspector هات اظافه کن
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
{
endpointDispatcher.DispatchRuntime.MessageInspecto rs.Add(new MessageInspector());
}
اگه میخوای چیزی که اظافه کردی رو تو Client بخونی ؛ یا از Client توش چیزی اظافه کنی؛ بفرستی سمت سرور؛ باز هم به همین منوال میتونی عمل کنی
فقط End Point Behavior خود Client ات رو هم Set میکنی
چند تا نکته به ذهنم میرسه
اول این که برای پیاده سازی Security؛ خیلی راه های شسته رفته شده تری هم هست؛ این رو من برای سایر دوستان میگم؛ شما برای خودتون دلیلی داشتین که از این روش استفاده کردین
دومین نکته اینه که با توجه به این که این سوال رو تو WCF پرسیدین ؛ احتمالا این کدتون رو میخواین تو WCF استفاده کنین ؛ دوست دارم به تمومی عزیزانی که روش شما رو نگاه کردند؛ یه مورد رو متذکر بشم؛ و اون اینه که با توجه به این که ما نمیدونیم که Encoder ما چه Encoder ای هست ؛ نمیتونیم قطع به یقین در مورد SOAP Header و ... صحبت کنیم , کما این که ممکنه Binary انکد کرده باشیم؛ مثل انکدر Custom خودم و ...
و کار به این صورت این وقتی درسته که بگیم؛ ما برای XML Encoder مون ؛ از این روش استفاده میکنیم
و برای مثلا Binary Encoder مون پیاده سازی دیگه ای داریم
یه مورد هم به شما دوست عزیز متذکر بشم و اون اینه که من این جواب رو فقط برای این قسمت ارائه دادم :
الا می خوام در ابتدا بتونم مثل یه فایل xml ذخیرش کنم یا به عنوان یه string ذخیرش کنم. بعد می خوام
ادامه ی "میخوام ..." برای من مهم نبود
قسمت مورد نظر من چیزی هستش؛ که تو Net Remoting. به Sink معروفه
Sink تو WCF 3 تا Level داره؛ اما شاید بهتر باشه که شما موردی رو که میخوای اظافه کنی؛ رو توی یه Custom Encoder بذاری
البته راه حلهای من فقط برای قسمت دسترسی به Message بود؛ نه برای مشکل Token اظافه کردن و ...
موفق باشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.