چگونه کار می کند
بیایید نگاهی گذرا به نحوه انجام کار بیندازیم.
- با هر درخواست HTTP یک توکن سفارشی ایجاد کنید.
- عبور آن از سربرگ درخواست (x-access-token)
- سرور رمز را از هر درخواست استخراج می کند
- با ایجاد مجدد در سرور، توکن سفارشی را تأیید کنید
- اگر نشانه مطابقت داشته باشد، سیستم مجوزهای کاربر را از پایگاه داده بررسی می کند
- در غیر این صورت، سیستم با کد وضعیت 403/404 پاسخ خواهد داد
پیش نیازها
به شدت توصیه می شود این پست های قبلی را مرور کنید.
- راه اندازی NodeJS - http://www.c-sharpcorner.com/article/how-to-start-with-node-js
- Package Manager NodeJS - http://www.c-sharpcorner.com/article/node-js-package-manager-vs2017
- قالب اولیه - http://www.c-sharpcorner.com/article/basic-templating-using-node-js-and-express
- یادگیری MEAN Stack - http://www.c-sharpcorner.com/article/learn-about-mean-stack
بیا شروع کنیم
قبلا جدول User را در پایگاه داده ایجاد کرده ایم. اکنون باید جدول دیگری به نام «UserAuthorization/Authorization» ایجاد کنیم.
- CREATE TABLE [dbo].[Authorization](
- [Id] [int] NOT NULL,
- [UserId] [nvarchar](50) NULL,
- [CanView] [bit] NULL,
- [CanPost] [bit] NULL,
- [CanPut] [bit] NULL,
- [CanDelete] [bit] NULL,
- CONSTRAINT [PK_Authorization] PRIMARY KEY CLUSTERED
- (
- [Id] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- GO
برای تأیید عملکرد کاربر، یک روش ذخیره شده جدید اضافه کنید.
- CREATE PROCEDURE [dbo].[UserAuthorization]
- @Userid NVarchar(250),
- @Methodtype NVarchar(250)
- AS
- BEGIN
- -- SET NOCOUNT ON added to prevent extra result sets from
- -- interfering with SELECT statements.
- SET NOCOUNT ON;
- -- Insert statements for procedure here
- SELECT CASE WHEN result = 1 THEN 'true' ELSE 'false' END AS result FROM
- (
- SELECT CASE
- WHEN @Methodtype = 'GET' THEN [CanView]
- WHEN @Methodtype = 'POST' THEN [CanPost]
- WHEN @Methodtype = 'PUT' THEN [CanPut]
- WHEN @Methodtype = 'DELETE' THEN [CanDelete]
- ELSE 0
- END AS result
- FROM [dbo].[Authorization] WHERE [UserId] = @Userid
- )AUTH
- END
- --EXEC UserAuthorization 'Shashangka', 'GET'
- GO
کار با پایگاه داده تمام شده است. ما می خواهیم از نمونه قبلی برنامه خود شروع کنیم. آن را از GitHub دانلود کنید ، سپس برنامه را با استفاده از Visual Studio 2017 باز کنید. در برنامه ما، باید هر دو سمت کلاینت و سمت سرور را تغییر دهیم. ابتدا می خواهیم در سمت کلاینت اصلاح کنیم.
سمت مشتری
بیایید ابتدا با سمت مشتری شروع کنیم. در اینجا ما قصد داریم توکن را بر اساس چندین فرآیند هش با رمزگذاری HMAC SHA256 و Base64 تولید کنیم.
در اینجا، HMAC برای کد احراز هویت پیام هش است و SHA256 تابع هش است.
اطلاعات بیشتر دریافت کنید: https://en.wikipedia.org/wiki/HMAC
تولید توکن
ما باید این دو کتابخانه را به صفحه طرح خود اضافه کنیم تا فرآیند هش/کدگذاری فعال شود.
- <script src="/javascripts/hmac-sha256.js"></script>
- <script src="/javascripts/enc-base64-min.js"></script>
تابع زیر توکنی را در سمت کلاینت تولید میکند که از هر هدر درخواست HTTP ارسال میشود.
- function generateSecurityToken(actionType, loggedUser) {
- var model = {
- username: loggedUser,
- key: actionType,
- userAgent: navigator.userAgent.replace(/ \.NET.+;/, '')
- };
- var message = [model.username, model.userAgent].join(':');
- var hash = CryptoJS.HmacSHA256(message, model.key);
- var token = CryptoJS.enc.Base64.stringify(hash);
- var tokenId = [model.username, model.key].join(':');
- var tokenGenerated = CryptoJS.enc.Utf8.parse([token, tokenId].join(':'));
- return CryptoJS.enc.Base64.stringify(tokenGenerated);
- };
یک فایل .js در پوشه public/javascripts با نام autorization.js ایجاد کنید ، قطعه کد را کپی کنید و سپس آن را جایگذاری کنید.