دریافت ip در سرویس های ساخته شده به صورت میکروسرویس


#41

برام سواله که من کل درخواست رو کدگذاری کنم یا فقط ip که برام مهمه . چون سایت روش https سواره فکر نکنم از کل درخواست مشکلی برام وجود داشته باشه فقط ip رو مثلا هش کنم با یکی از موارد کدگذاری خوب ارسال کنم؟

نظرتون چییه ؟


#42

کل درخواست, کمترین احمیت به ip اختصاص داره.

اصلا ip مهم نیست اما کل درخواست encrypt بشه و ارتباط forced https


#43

فکر کنم باز یه چیزی رو نگفتی که داری به رمزنگاری ip فکر میکنی :slight_smile:


#44

اصلا phoenix و api میتونن با vpn شما به هم وصل بشن اگر خیلی موضوع حساسه


#45

نه هرچی بود گفتم . باید برم تو کار الان دارم تئوری می گم زیاد جالب نیست باید برم ببنیم چه راهی رو برای رمگذاری کامل می تونم انجام بدم

برای جمع بندی به این صورته که

من در دایره قرمز کل ورودی رو رمزگذاری می کنم در مربع وسط پروکسیم از رمز در می یارم اگر ولید بود و به میکروسرویس می فرستم و جواب رو بر می گردونم به پروکسی که پروکسی به دایره قرمز بر می گردونه .

در برگشت خروجی هم باید کد بشه باز ؟


#46

اگر این راه انجام بشه باید یک پراویت api درست بکنم جدا براشون که همون شبکه داخلی بشه بجای دامنه سایت با مثلا localhost/p/api ارسال کنه


#47

کلا چیزی که شما لازم داری یک identifier و api key برای تعریف و ولیدیت phoenix هست،


#48

تو فکرم بودم ببنیم می تونم از گادرین استفاده کنم یا نه !! :thinking:


#49

فکر خوبیه, کلا باید این کار به صورت jwt انجام بشه


#50

تو گاردین دوتا مشکل دارم

۱. باید تو هر دو سایت کلید خصوصی خودمو بزارم . کلیدی که برای jwt درست کردم
۲. درست طرف نمی تونه توش تغییر ایجاد کنه ولی می تونه بزاره تو http://jwt.io قشنگ توشو ببینه چه متغییر هایی قرار دادم ( اگر این مشکل نگیریم مشکل اول می مونه به نظرم مواردی مثل end to end درست بکنم خیلی بهتره )

اینجا هم مشکلمو گفتم


و



توضیحات تکمیلی در مورد مشکل دوم

در رابطه با مشکل دوم فکر کنید به این صورت یکی ساخته شد

{:ok, token, _claims} = Guardian.encode_and_sign(user, %{some: "claim", userid: 2, admin: 2}, token_type: "access",ttl: {99, :weeks})

حال توکن اگر در سایت jwt بدون کلید خصوصی قرار بگیره

خروجی :

{
  "admin": 2,
  "aud": "trangell_users_service",
  "exp": 1587933450,
  "iat": 1528058250,
  "iss": "trangell_users_service",
  "jti": "00e3731f-4acd-47d2-b1a9-dc0d6a3adc00",
  "nbf": 1528058249,
  "some": "claim",
  "sub": "12",
  "typ": "access",
  "userid": 2
}

بر می گردونه پس این امضای دیجیتال هست تا کدگذاری و نامفهوم کردن متن . درسته صحبتم ؟


#51

توی چی رو ببینه؟ اگر میشه مستقیم به مشکل اصلی اشاره کن،
منظورت اینه که کاربر میتونه ارتباط phoenix و api gateway رو ببینه؟ یعنی مثل man in the middle ؟
مورد دوم اینه که کار jwt رمزنگاری نیست، token exchange بیت دوتا پارتی هست در اینجا phoenix و api gatewaye یا همون پروکسیمون. رمزنگاری توی سرور انجام میشه و توی header و payload باید claim ها رو قرار بدی، نمیدونم فارسیشو چی بگم اما معنی کلیش ادعا هست.
مورد بعدی اینه که اگر سرویس auth نداری میتونی اصلا انقدر پیچیدش نکنی، messaging بین فینکس و api رو رمزشده بفرست + توکنی که در هر طرف پیام رو decrypt کنه و توی پیام فینکس خودشو به عنوان فینکس معرفی کنه، میتونی از chipher استفاده کنی, ارتباط هم کلا رمزشده باشه میتونی از openssl استفاده کنی.

مورد بعدی که مد نظر من هست اینه که این دیتایی که قراره سینک کنی رو به صورت بالک در پیام رمزنگاری شده بزار و یک background job کار سینک و ترنسفر رو انجام بده.

سایفر:
https://hexdocs.pm/cipher/api-reference.html

Helper




تایتل این ضوع عوض بشه بهتره, چون موضوع چیز دیگست,


#52

درود توماج جان توی توکن رو کاربر خودش ببینه یعنی اگر بخواهم اطلاعاتی رو محرمانه بفرستم ولی من به محرمانه ارسال کردش حتی از دید کاربری که توکن دریافت می کنه ندارم ولی سوال برام پیش اومده بود.

الان بیاییم پیچیده نکنیم یک سوال اصلی :

اگر من کد کانفیگ که در اون کلید من برای ساخت توکن هست رو در هر دو سایت بزارم آیا مشکل ایجاد می کنه یا خیر؟

منظورم این کده :

config :api_trangell, ApiTrangell.Guardian,
  issuer: "api_trangell",
  allowed_algos: ["ES512"],
  secret_key: %{
    "alg" => "ES512",
    "crv" => "P-521",
    "d" => "5lzq86dlBivEqOmJj_6x_xW5lxY5bCAV1cxJ1Lt8fsshKAkHOz3j0iOF_ruG2PYXF69kDnY3HvSiY2tbog2UjBc",
    "kty" => "EC",
    "use" => "sig",
    "x" => "AIYZCBlSZ4jGvRHJnhWU_s85Uqu6Fl8F7TMMD1WjcibHIGIHfPjEwyfIdmAjvgMwKalqjhKIgqQEejvaPtxHwLMB",
    "y" => "AOogDP-U1x4VcgL0xUr7TEXc9FmQv3wvJ_goDW6ZJ_1PBebpOVltZP-3ydG1nAr-ddqoq9AFUQP9UhY3wQhvKFD_"
  }

توماج جان توی گادرنی به این صورت توکن در سایت phoenix درست می شه

{:ok, token, _claims} = Guardian.encode_and_sign(user, %{some: "claim", userid: 2, admin: 2}, token_type: "access",ttl: {99, :weeks})

حالا من می تونم این توکنی که از کد بالا می گیرم رو هم در body و هم در هدر خودم قرار بدم . در هدر به صورت زیر

authorization: Bearer MYTOKEN

و توی بادی به صورت json که به شرح زیر می شود :

"token": "MYTOKEN"

حالا اگر اون مواردی که بالا گفتم یعنی کلید توی هر دو سایت باشه و مشکلی ایجاد اگر نمی کنه می تونم از همین توکن اطلاعاتی که می خواهم را استخراج کنم .

من دیروز این سایفر رو بررسی کردم . اینم باید دو طرف یعنی هم در phoenix و هم در api باید کلید خصوصی اونجا وجود داشته باشه تا از حالت کدگذاری در بیاره . یعنی نمی یاد با کلید عمومی این کارو بکنه و در api با کلید خصوصی از حالت رمز در بیاره .

متاسفانه متوجه این موضوع نشدم یک خورده بالای دکترا بودتوماج جان این سطحشو اگر زحمت بکشی بیاری زیر دیپلم ممنونت می شم :sweat_smile:

اگر تیتری مدنظر شما هست بفرمایید بنده اون رو تغییر بدم .

ممنون ازت بخاطر وقتی که قرار می دی ممنون


#53

این قسمتی که نوشتم احساس کردم جالب نیست .من می تونم علاوه بر توکن تو بادی کل درخواست رو هم بزارم که اون ور راحتر بیام دریافت کنم تا اینکه از داخل توکن ایجاد شده اطلاعات مورد نیازمو استخراج کنم

درسته ؟


#54

ok, یکی به یک بریم جلو

درود توماج جان توی توکن رو کاربر خودش ببینه یعنی اگر بخواهم اطلاعاتی رو محرمانه بفرستم ولی من به محرمانه ارسال کردش حتی از دید کاربری که توکن دریافت می کنه ندارم ولی سوال برام پیش اومده بود.

اول اینو ترجه کن


اگر من کد کانفیگ که در اون کلید من برای ساخت توکن هست رو در هر دو سایت بزارم آیا مشکل ایجاد می کنه یا خیر؟

هر دو سایت یعنی کدو سایتها؟ متوجه نمیشم دقیقا مشکل چی میتونه باشه

توماج جان توی گادرنی به این صورت توکن در سایت phoenix درست می شه

بنظر درست میاد

من دیروز این سایفر رو بررسی کردم . اینم باید دو طرف یعنی هم در phoenix و هم در api باید کلید خصوصی اونجا وجود داشته باشه تا از حالت کدگذاری در بیاره . یعنی نمی یاد با کلید عمومی این کارو بکنه و در api با کلید خصوصی از حالت رمز در بیاره .

همینطوره, برای فرستادن پیام رمزشده گزینه خوبیه

background job

سر فرصت توضیح میدم اگر یاد آوری کنی

اگر تیتری مدنظر شما هست بفرمایید بنده اون رو تغییر بدم .

این موظوع ربطی به ip نداشت کلی رفتیم تو باقالیا


#55

مورد اول :

این یک نمونه توکن هست :

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6MiwiYXVkIjoidHJhbmdlbGxfdXNlcnNfc2VydmljZSIsImV4cCI6MTU4NzkzNDEzOSwiaWF0IjoxNTI4MDU4OTM5LCJpc3MiOiJ0cmFuZ2VsbF91c2Vyc19zZXJ2aWNlIiwianRpIjoiZDZhMzVkM2YtMjgyYS00NWFhLWE5YjMtYmE1NWE2YTQyYzBiIiwibmJmIjoxNTI4MDU4OTM4LCJwZW0iOnsiZGVmYXVsdCI6WyJwdWJsaWNfcHJvZmlsZSJdLCJ1c2VyX2FjdGlvbnMiOlsiYm9va3MiXX0sInNvbWUiOiJjbGFpbSIsInN1YiI6IjEyIiwidHlwIjoiYWNjZXNzIiwidXNlcmlkIjoyfQ.P_nX9tPFZIDeesMhPEKeW82xL4AyR2G6Zgj2KKPD_bA" 

در سایت jwt بزنید اطلاعاتی که در clame قرار دادم می شه دید . یعنی اگر توکن دست شما باشه شما می تونید اطلاعات داخل اون رو مشاهده کنید . این مشکلی ایجاد نمی کنه برام و بالا صحبت شد که امضای دیجیتال هست نه رمز کردن ولی برام به صورت کلی سوال شده بود که برای end to end چه می کنند ملت که تمام متنشون کامل رمز شده است



مورد دوم


یعنی کد کلید یا همون کانفیگ هم توی دایره قرمز هست هم در مربع api , آیا مشکل ایجاد خواهد کرد ؟ چون معمولا در درس هایی چرتی که در دانشگاه خوندیم سایت اول یعنی دایره قرمز با کلید عمومی مربع یعنی api می یاد چیزی که می خواهد را کدگذاری می کند . به همین منظور گفتم .


#56

بدون داشتن secret این اطلاعات بدرد کسی نمیخوره, منظورم خود jwt نیست. cipher secret رو گفتم.
میتونی token رو انکریپت کنی, همونطور که بالا هم عرض کردم jwt روش tokenize و token exchange هست نه encryption پس خودشم باید روی شبکه امن منتقل بشه. حالا با وجود https چطور میشه توکن رو دید؟


#57

3 تا مورد گفته شد, برای هدف شما واقعا فقط لازمه دیتا رو encrypt کنی و در جای دیگه باز کنی خیلی پیچیدش نکن


#58

ممنون توماج جان . اصل پیچیده شدنش در این وسط این بود که برای من سوالاتی دیگه هم پیش اومد در ذهنم مثل end to end کردن اپ های چت و …

به نظرم فقط استفاده از گاردین جواب گوی من هست. چون اطلاعاتی که داره ارسال می شه فقط نیاز به امضا داره که تایید بشه از این فونیکس هست و توش مهم نیست . پس فکر می کنم باز از سایفر نیاز نیست استفاده کنم. و همینطور شما فرمودید به علت وجود https باز هم توکن دیده نمی شود پس همون که فقط jwt بشه و امضا بشه کافیه.


#59

راستی! فکر کنم به این مورد برای سینک کردن بین سرویس ها نیاز داشته باشی، البته اگر خودت روش دیگه ای رو بکار نبرده باشی


#60

از تسک سوپروایزر و همینطور exq استفاده می کنم توماج جان ولی من اونجا که شما برای کدگذاری گفتید بکگراند جاب استفاده کنیم متوجه نشدم . واقعیت امر

exq خیلی ساده و دلپذیره . برای ارسال ایمیل و درخواست هایی که حتما نباید چک کنم انجام شده یا نه از اون استفاده می کنم ولی برای مواردی که حتما نیاز دارم جواب بگیرم از تسک سوپروایزر

ممنون از لینکتون و پیگیری شما نسبت به این پست و تمام مشکلاتی که بنده مطرح کردم به شدت بنده رو خجالت زده می کنه و جز تشکر کاری از دستم بر نمی یاد .

بسیار ممنونم