Asp.Net, Security, Uncategorized

Authentication basics in ASP.Net

Authentication: Is the process that makes it known about the identity of the user. When a user logs in with his username, password, the server identifies the user based on that.

Creating the principal:

  • Authentication happens in the host. EX: IIS. IIS uses HTTP modules for authentication.
  • Modules can be built in or custom.
  • The host authenticates the user by creating a Principal, It is an IPrincipal object. It represents the security context under which the code is running.
  • Host attaches this newly created principal to the current thread. As we know whenever a request comes to the web server it creates a separate thread for that request to be handled. (Huge discussion). It does so by setting the Thread.CurrentPrincipal.
  • Each principal contains an object called Identity that contains information about the user.
  • If the user is authenticated the identity.isAuthenticated property returns true. For anonymous requests, it returns false.

Setting the principal:

  • For custom authentication: We need to set the principal in two places.
    • Thread.CurrentPrincipal
    • HttpContext.Current.User

Code:

Private void SetPrincipal(IPrincipal Principal)

{

       Thread.CurrentPrincipal = principal;

       if(HttpContext.Current.User != null)

              {

                          HttpContext.Current.User = principal;

              }

}

  • For web hosting we need to set these both. For self hosting the HttpContext.Current.User is null.

Modules vs MessageHandler:  We can use HTTP message handler to handle our authentication logic. In this case, the message handler examines the HTTP requests and sets the principal. But there are some trade-offs you want to consider before doing that.

  • An HTTP module sees all the requests that go through the ASP.NET pipeline, a message handler sees only the requests that are bound to the web API.
  • We can set authentication logic for each routes using message handlers
  • HTTP modules only work with IIS, so it can only be used for web hosting. Message handler doesn’t depend on IIS. Authentication using message handler can be used for both web hosting and self-hosting.
  • HTTP modules are used for IIS logging, auditing etc
  • HTTP modules run very early in the ASP.NET pipeline. On the other hand, if the principal is set using the message handler, then it only runs when that message handler runs and the principal’s value gets reset when response leaves the message handler.

Usually, if self-hosting is not needed, HTTP module is the correct place to put authentication code. And if we need self-hosting, we need message handlers to handle authentication logics.

ফিনান্স/Finance

ফিনান্সিয়াল ইন্টেলিজেন্স ভূমিকা- পার্ট ২ঃ

ফিনান্সিয়াল লিটেরাসি (অর্থনৈতিক স্বাক্ষরতা) :

বেশির ভাগ মানুষ বুঝতে ব্যর্থ হয় যে জীবনে কত টাকা আয় করলাম এটা আসল কথা না, বরং কত টাকা জমাতে (সেভিংস) পারলাম সেটাই আসল বেপার। আমরা প্রায়ই শুনতে পারি ধনী, মিলিওনিয়ার খেলোয়াড়, তারকাদের কথা, যারা কম  বয়সে অনেক টাকা উপার্জন করলেও কর্পদকশুন্য হয়ে শেষ জীবন অতিক্রম করছেন অথবা করেছেন। সবার-ই একি প্রশ্ন থাকে- কিভাবে আমরা ধনী হতে পারি এবং তাও অনেক তাড়াতাড়ি। 😀 এটার এক্টাই উত্তর- ফিনান্সিয়াল লিটেরাসি আর বাংলায় যাকে বলা যেতে পারে অর্থনৈতিক স্বাক্ষরতা অর্জন করা।

যদি আমরা সুউচ্চ-লম্বা বিল্ডিং বানাতে চাই, তাহলে আমাদের সবার আগে যা লাগবে তা হল একটা খুব ভাল এবং গভীর ফাউন্ডেশন। আর যদি আমরা একটা টিনের চালা বানাতে চাই তাহলে আসলে ছয় ইঞ্চির স্লাব হলেই যথেষ্ট। বেশির ভাগ মানুষ-ই দ্রুত ধনী হওয়ার লোভে ছয় ইঞ্চি স্লাব এ এম্পায়ার স্টেট/টুইন টাওয়ার বিল্ডিং বানানোর চেষ্টায় জীবন পার করে।

এর পিছনে আমাদের স্কুল সিস্টেম এর দায়টাও কম না। আদিম যুগে হয়ত ফাউন্ডেশন ছাড়াই বাসা বানানো যেত, কিন্তু এযুগেও স্কুল-কলেজ আমাদের সেই ফাউন্ডেশন ছাড়াই টুইন টাওয়ার বানানোর শিক্ষা দিয়ে যাচ্ছে। এর ফলে শিক্ষার্থীরা যখন স্কুল-কলেজ-বিশ্ববিদ্যালয় থেকে বের হচ্ছে তারা তখন হাতে কুঠার নিয়ে টুইন টাওয়ার বানানোর কাজে যোগ দিতে বাধ্য হচ্ছে। একদিন তারা নিজদের লোন-ধার এ জর্জরিত অবস্থায় দেখতে পায়- চোখে তখনও টুইন টাওয়ার এর স্বপ্নের অপ্রাপ্তি। তারা তখন চায় তাড়াতাড়ি ধনী হতে- যেকোন উপায়ে সেটা সৎ হোক আর অসৎ। টুইন টাওয়ার এর কন্সট্রাকশন শুরু হয়, কিন্তু টুইন টাওয়ার এর পরিবর্তে সেটা হেলানো তালগাছ ছাড়া আর কিছু হয় না।

অথচ স্কুল-কলেজ এর দায়িত্ব ছিলো এই ফাউন্ডেশন টা তৈরি করে দেয়া। একাউন্টিং সম্ভবত অন্যতম একটা বোরিং আর কনফিউজিং একটা সাবজেক্ট। কিন্তু অর্থনৈতিক স্বাক্ষরতা, ফাউন্ডেশনের জন্য এর থেকে গুরুত্বপূর্ণ বিষয় খুব কম-ই আছে যা আমাদের দীর্ঘমেয়াদে সচ্ছলতা আনতে সাহায্য করে। আর চিন্তা করা যায় এই বিষয়টা আমাদের স্কুল-কলেজ এ কতটা হেয় ভাবে শেখানো হয়। কেউ যদি কমার্স/বাণিজ্য নেয় আমরা ধরেই নেই যে তার মেধা কম। অথচ এই বিষয়টি আমাদের শুধু বাণিজ্য শাখা না, সবার জন্য বাধ্যতামূলক করা উচিৎ। বিতর্কিত মনে হলেও আমি বিজ্ঞান, বাংলা ব্যাকরণ, ইংরেজি, ধর্ম এর থেকে  বাস্তবিক জীবনে একাউন্টিং এর গুরুত্ব বেশি না হলেও কম বলে মনে করি না।

এখন এই বিষয়ে হয়ত ছোট্ট একটা হাতে-খড়ি দেয়ার চেষ্টা করবো পরবর্তী অংশগুলোতে। এখন পর্যন্ত আমার কথা গুলো ভাল লেগে থাকলে আশা করি পরেও হতাশ হতে হবে না।

Robert Kiyosaki এর Rich Dad Poor Dad অবলম্বনে।

ফিনান্স/Finance

ফিনান্সিয়াল ইন্টেলিজেন্স ভূমিকা- পার্ট ১ঃ

ফিনান্সিয়াল ইন্টেলিজেন্সঃ ফিনান্সিয়াল ইন্টেল্লিজেন্স জিনিস টা নিয়ে লেখার অনেক দিন থেকেই ইচ্ছে ছিল আমার। কথা আসতে পারে একজন টেকনিক্যাল মানুষ হয়ে ফিনান্স রিলেটেড কতটুকু নলেজ থাকতে পারে আমার। তার শুরুতেই বলে নেই যে আমি যা বলছি এখানে সব-ই আমার নিজের পড়াশুনা থেকে প্রাপ্ত। যতটুকু বুঝতে পেরেছি ততটুকুই আশা করি মানুষের উপকারে আসবে।

ফিনান্সিয়াল ইন্টেলিজেন্স এমন একটা জিনিস আমি মনে করি প্রাইমারী স্কুল পার হওয়ার পরেই এই সম্পরকে জানা দরকারি। ওই সময়টাতে একজন এর যে ফাউন্ডেশন টা তৈরি হয় দেখা যায় যে পরবর্তী জীবনে সেটার ভূমিকাই থাকে সবচে বেশি। কিন্তু দুর্ভাগ্য জনক ভাবে আমাদের কে এই জ্ঞ্যান টা কেউ দেয় না বা সামান্যতম গাইডেন্স ও পাওয়া যায় না। এর ফলে যা হওয়ার তাই হয়। বেশির ভাগ যুবক বেকার হয়ে নিজেদের জীবন সম্পরকে হতাশ হয়ে mediocrity কেই মেনে নিতে বাধ্য হয়, নাহলে বাবা-মার সম্পত্তি বিক্রয় করে ঘুষ এর টাকায় সরকারি চাকুরির পিছনে ছুটে।

ফিনান্সিয়াল ইন্টেইলিজেন্স- বাংলা অর্থ করলে দাঁড়ায় অর্থনৈতিক বুদ্ধিমত্তা। আরও সহজ করলে টাকা পয়সা সম্পরকে আপনার ধারনা। আমাদের আশে পাশের সবার একটা খুব কমন সমস্যা হলো টাকার সাথে আমাদের সম্পর্ক খারাপ। আমরা নিজদের দুই ধরনের ক্যাটাগরি তে ফেলতে পারি-

১) যারা টাকা কে জীবনের সবকিছু মনে করেন

২) যারা টাকা কে কিছুই মনে করেন না। (কিছুটা এই রকম- টাকা তো আসবে যাবেই। আমি কোন দিন টাকা কে দাম দেই না)

এই দুই ধরনের চিন্তাতেই সমস্যা আছে। টাকা যেমন আপনার জীবনের সবকিছু না। তেমনি এটার ভূমিকা আপনার জীবনে অনেক বড়। এই দুইটা এক্সট্রিম পয়েন্ট কে যারা ব্যালান্স করতে পারেন তাদের কেই আমরা বলতে পারি ফিনান্সিয়ালি ইন্টেলিজেন্ট।

আমাদের আরও একটা বড় সমস্যা হল আমরা টাকা নিয়ে আলোচনা করি না। আমাদের মধ্যে একটা অদ্ভুত বেপার কাজ করে যেন এই বেপার টা নিয়ে কথা বললে অন্যরা আমার থেকে বেশি ধনী হয়ে যাবে। 😛 মানে কি দাঁড়ালো যে আমরা নিজেদের কে নিয়ে যত না ব্যস্ত, তার থেকে অন্যের ধনী হওয়া নিয়ে আমাদের ভয় বেশি। 😀

যাই হোক, এই টপিক নিয়ে এগিয়ে যাওয়ার আগে আমাদের আসলে নিজেদের কে প্রশ্ন করা উচিৎ, আমরা কি নিজেদের ফিনান্সিয়াল অবস্থা নিয়ে সন্তুষ্ট? যদি না হই তাহলে আমরা কি আমাদের সন্তুষ্টি লেভেল বাড়াতে ইচ্ছুক? এখানে কিন্তু আমি বলেছি সন্তুষ্টি লেভেল নিয়ে। অর্থনৈতিক অবস্থা নিয়ে না। একজন এর কাছে অর্থনৈতিক অবস্থা যেটা সন্তুস্টজনক অন্যজন এর কাছে সেটা নাও হতে পারে। এবং এটা পারফেক্টলি ওকে। সবার সিচুয়েশন, চাহিদা কখনও এক হবে না। এই বেপারটা বুঝতে পারাই হচ্ছে ফিনান্সিয়াল ইন্টেলিজেন্স এর প্রথম ধাপ।

তো এই অবস্থায় আমরা নিজদের প্রশ্ন করে নেই আগে যে আমরা কি চাই। কেন চাই। এবং সেটা স্পষ্ট করে লিখে ফেলি। কি পেলে আমরা মনে করি আমরা ফিনান্সিয়াল হ্যাপিনেস পাব। সেটা কোন বস্তু হতে পারে, কোন পদবী হতে পারে অথবা কোন অর্জন হতে পারে। কথায় আছে নিজেকে জানুন আগে। আমরা যদি এই পর্যন্ত নিজেদের ইন্টারেস্ট ধরে রাখতে পারি। তাহলে নেক্সট স্টেপ টা আমাদের জন্য নেয়া সুবিধাজনক হবে।

Asp.Net, Security

Authentication in Module vs MessageHandler

We are often confused about where to put our authentication code in the Asp.Net life cycle’s pipeline. I believe the below discussion can come to help in that regard.

Modules vs MessageHandler:  We can use HTTP message handler to handle our authentication logic. In this case, the message handler examines the HTTP requests and sets the principal. But there are some trade-offs you want to consider before doing that.

  • An HTTP module sees all the requests that go through the ASP.NET pipeline, a message handler sees only the requests that are bound to the web API.
  • We can set authentication logic for each routes using message handlers
  • HTTP modules only work with IIS, so it can only be used for web hosting. Message handler doesn’t depend on IIS. Authentication using message handler can be used for both web hosting and self-hosting.
  • HTTP modules are used for IIS logging, auditing etc
  • HTTP modules run very early in the ASP.NET pipeline. On the other hand, if the principal is set using the message handler, then it only runs when that message handler runs and the principal’s value gets reset when response leaves the message handler.

Usually, if self-hosting is not needed, HTTP module is the correct place to put authentication code. And if we need self-hosting, we need message handlers to handle authentication logics.