ورود اولیه کاربران
معرفی
سرویس Auth مسئول مدیریت احراز هویت کاربران و تولید کلید عمومی (Public Key) از طریق HD Wallet است. این سرویس شامل قابلیت ورود کاربران با OTP و اطمینان از وجود کلید عمومی برای هر کاربر جهت انجام عملیات امن در ادامه میباشد.
متدها و عملکردها
ورود با OTP
نام متد: LoginWithOTP
توضیحات: احراز هویت کاربر با استفاده از کد OTP. در صورت عدم وجود کاربر، یک کاربر جدید ایجاد شده و کلید عمومی از سرویس Wallet دریافت میشود. کاربرانی هم که از قبل ثبتنام کردهاند، چک میشوند و در صورت نداشتن کلید عمومی برای آنها تولید میشود.
ورودیها:
UserLoginReq: شامل اطلاعاتی مانند شماره موبایل و کد OTP.
خروجیها:
UserAccessTokenRes: شامل AccessToken، RefreshToken و AccessExpiresAt.
جریان عملکرد:
1- بررسی اعتبار کد OTP با استفاده از متد CheckOTPCode.
2- ایجاد کاربر جدید در صورت عدم وجود کاربر با تخصیص نقشهای پیشفرض و فعالسازی وضعیت.
3- بررسی وجود کلید عمومی برای کاربر.
4- دریافت کلید عمومی از سرویس Wallet در صورت عدم وجود کلید.
5- تولید Access Token و Refresh Token.
6- ذخیره اطلاعات سشن کاربر جهت پیگیری.
دریافت کلید عمومی با کد ملی
نام متد: GetPublicKeyByNationalID
توضیحات: با برقراری ارتباط gRPC با سرویس Wallet، کلید عمومی مربوط به کد ملی کاربر را بازیابی میکند.
ورودیها:
nationalId: کد ملی کاربر.
خروجیها:
pubKey: کلید عمومی مربوط به کاربر.
جریان عملکرد:
1- اتصال به سرویس Wallet از طریق gRPC.
2- فراخوانی متد GetPublicKeyByNationalID از سرویس Wallet.
3- بازگرداندن کلید عمومی یا خطا.
بررسی وجود کلید عمومی
نام متد: GetPubKeyByNationalID
توضیحات: بررسی میکند که آیا کلید عمومی برای کد ملی مشخصشده وجود دارد یا خیر.
ورودیها:
nationalId: کد ملی کاربر.
خروجیها:
isExist: بولین جهت تعیین وجود کلید عمومی.
جریان عملکرد:
1- جستجوی کلید عمومی غیر تهی در پایگاه داده با استفاده از کد ملی.
2- بازگرداندن نتیجه بررسی و خطا.
افزودن کلید عمومی با شناسه کاربر
نام متد: AddPubKeyByUserId
توضیحات: کلید عمومی را به یک کاربر خاص در پایگاه داده اضافه میکند.
ورودیها:
userId: شناسه کاربر.pubKey: کلید عمومی برای افزودن.
خروجیها:
error: خطا در صورت شکست عملیات.
جریان عملکرد:
1- بهروزرسانی ستون public_key در جدول کاربران برای شناسه کاربر مشخص.
مستندات سرویس Wallet
معرفی
سرویس Wallet وظیفه تولید و مدیریت کلیدهای عمومی را بر عهده دارد. این سرویس از یک HD Wallet با کلید مادر (Master Key) برای ایجاد کلیدهای عمومی استفاده میکند.
متدها و عملکردها
دریافت کلید عمومی با کد ملی
نام متد: GetPublicKeyByNationalID
توضیحات: کلید عمومی را بر اساس HD Wallet برای کد ملی مشخص تولید میکند.
ورودیها:
userNationalId: کد ملی کاربر.
خروجیها:
pubKey: کلید عمومی تولید شده.
جریان عملکرد:
1- تبدیل کد ملی به قالب مناسب جهت تولید کلید.
2- استفاده از bip32 برای خواندن کلید مادر.
3- تولید کلید فرزند با استفاده از کد ملی.
4- ایجاد هش SHA-256 از کلید فرزند.
5- تولید کلید Stellar از طریق هش ایجاد شده.
6- بازگرداندن آدرس عمومی Stellar.
نحوه تعامل سرویسها
جریان ورود کاربر:
1- سرویس Auth احراز هویت کاربر را انجام داده و اطمینان حاصل میکند که کلید عمومی برای هر کاربر وجود دارد.
2- در صورت عدم وجود کلید عمومی، سرویس Wallet برای تولید کلید عمومی فراخوانی میشود.
تولید کلید عمومی:
1- سرویس Wallet بر اساس کد ملی و با استفاده از ساختار HD Wallet کلیدهای عمومی را تولید میکند.