ডাব্লুআইএফ ব্যবহার করে একটি স্ট্রিমড ডাব্লুসিএফ নেট.tcp পরিষেবাটি শেষ পয়েন্টটি সুরক্ষিত করার জন্য আমার প্রয়োজন রয়েছে । এটি আমাদের টোকেন সার্ভারের বিপরীতে আগত কলগুলি প্রমাণীকরণ করবে। পরিষেবাটি স্ট্রিম করা হয়েছে কারণ এটি বৃহত পরিমাণে ডেটা এন স্টাফগুলি স্থানান্তর করার জন্য ডিজাইন করা হয়েছে।
এটি অসম্ভব বলে মনে হচ্ছে। এবং যদি আমি ধরা ধরতে না পারি তবে আমার ক্রিসমাসটি নষ্ট হয়ে যাবে এবং আমি ময়দার জলে নিজেকে মেরে ফেলব, যখন আনন্দিত ক্রেতারা আমার ধীরে ধীরে শীতল শরীরের উপরে উঠবে। গুরুতর বিষয়, আপনি না।
কেন এটা অসম্ভব? এখানে ক্যাচ -২২।
ক্লায়েন্টে, আমার টোকেন সার্ভার থেকে জেনেরিক এক্সএমএলসিকিউরিটি টোকেনের সাথে আমার একটি চ্যানেল তৈরি করতে হবে। কোন সমস্যা নেই.
// people around here hate the Framework Design Guidelines.
var token = Authentication.Current._Token;
var service = base.ChannelFactory.CreateChannelWithIssuedToken(token);
return service.Derp();
আমি কি "কোন সমস্যা নেই" বলেছি? সমস্যা নেই। আসলে, NullReferenceException
শৈলী সমস্যা।
"ব্রো," আমি ফ্রেমওয়ার্ককে জিজ্ঞাসা করলাম, "আপনি কি চেক করে ফেলেন?" ফ্রেমওয়ার্কটি নিরব ছিল, তাই আমি বিচ্ছিন্ন হয়েছি এবং এটি পেয়েছি
((IChannel)(object)tChannel).
GetProperty<ChannelParameterCollection>().
Add(federatedClientCredentialsParameter);
ব্যতিক্রমের উত্স ছিল এবং GetProperty
কলটি ফিরে আসছিল null
। তো, ডব্লিউটিএফ? দেখা যাচ্ছে যে আমি যদি বার্তা সুরক্ষা চালু করি এবং ক্লায়েন্টের শংসাপত্র প্রকার সেট করে রাখি IssuedToken
তবে এই সম্পত্তিটি এখন উপস্থিত রয়েছে ClientFactory
(প্রিপেইপ: আইচানেল, জারজ মধ্যে কোনও "সেটপ্রপার্টি" সমতুল্য নেই)।
<binding name="OMGWTFLOL22" transferMode="Streamed" >
<security mode="Message">
<message clientCredentialType="IssuedToken"/>
</security>
</binding>
মিষ্টি। আর এনআরই নেই। যাইহোক, এখন আমার ক্লায়েন্ট জন্মের সময় দোষযুক্ত হয়েছে (এখনও তাকে ভালবাসি, তবে)। ডাব্লুসিএফ ডায়াগনস্টিকগুলির মাধ্যমে খনন করা (প্রোটপ: আপনার সবচেয়ে খারাপ শত্রুদের তাদের পিষে ফেলার পরে এবং তাদের আগে চালানোর পরে তাদের মহিলাদের এবং শিশুদের বিলাপগুলি উপভোগ করার আগে এটি করুন), আমি এটি সার্ভার এবং ক্লায়েন্টের মধ্যে সুরক্ষিত অমিলের কারণেই দেখছি।
অনুরোধ করা আপগ্রেড 'নেট.tcp: // লোকালহোস্ট: 49627 / মাই সার্ভিস' দ্বারা সমর্থিত নয়। এটি মেলানো বাছাইয়ের কারণে হতে পারে (উদাহরণস্বরূপ ক্লায়েন্টের উপর সুরক্ষা সক্ষম করা হয়েছে এবং সার্ভারে নয়)।
হোস্টের চিত্রগুলি পরীক্ষা করা হচ্ছে (আবার: ক্রাশ, ড্রাইভ, লগগুলি পড়ুন, বিলাপগুলি উপভোগ করুন), আমি দেখছি এটি সত্য
প্রোটোকল টাইপ অ্যাপ্লিকেশন / ssl-tls একটি পরিষেবাতে প্রেরণ করা হয়েছিল যা এই ধরণের আপগ্রেড সমর্থন করে না।
"ভাল, স্ব," আমি বলি, "আমি কেবল হোস্টের বার্তার সুরক্ষা চালু করব!" এবং আমি করি. এটি দেখতে কেমন লাগে তা যদি জানতে চান তবে এটি ক্লায়েন্ট কনফিগারেশনের একটি সঠিক অনুলিপি। খুঁজে দেখো.
ফলাফল: কাবুম।
বাইন্ডিং ('নেটটসিপিবাইন্ডিং', ' http://tempuri.org/ ') স্ট্রিমিং সমর্থন করে যা বার্তা স্তর সুরক্ষা সহ একসাথে কনফিগার করা যায় না। একটি অন্য স্থানান্তর মোড বা পরিবহন স্তর সুরক্ষা চয়ন বিবেচনা করুন।
সুতরাং, আমার হোস্ট টোকেনের মাধ্যমে উভয়ই স্ট্রিম এবং সুরক্ষিত হতে পারে না । ধরা 22.
tl; dr: WIF ব্যবহার করে আমি কীভাবে একটি স্ট্রিমড নেট.tcp ডাব্লুসিএফ শেষ পয়েন্টটি সুরক্ষিত করতে পারি ???
TransportWithMessageCredential
মোড অন্য বিকল্প হতে পারে।
<security mode="Transport" /> <transport clientCredentialType="IssuedToken" /> </security>