یک API را با OAuth ایمن کنید

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

چیزی که یاد خواهید گرفت

  • یک نمونه پروکسی API را دانلود و استقرار کنید.
  • یک پروکسی API محافظت شده با OAuth ایجاد کنید.
  • یک محصول، توسعه دهنده و برنامه ایجاد کنید.
  • مبادله اعتبار برای یک نشانه دسترسی OAuth.
  • با یک رمز دسترسی با یک API تماس بگیرید.

این آموزش به شما نشان می دهد که چگونه یک API را با OAuth 2.0 ایمن کنید.

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

با OAuth، اعتبارنامه های امنیتی (مانند نام کاربری/رمز عبور یا کلید/مخفی) با یک نشانه دسترسی مبادله می شود. به عنوان مثال:

joe:joes_password (نام کاربری: رمز عبور) یا
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb (کلید:مخفی)

چیزی شبیه به:

b0uiYwjRZLEo4lEu7ky2GGxHkanN

نشانه دسترسی یک رشته تصادفی از کاراکترها است و موقت است (باید پس از مدتی نسبتاً کوتاه منقضی شود)، بنابراین انتقال آن برای احراز هویت کاربر در گردش کار برنامه بسیار امن‌تر از انتقال اعتبار واقعی است.

مشخصات OAuth 2.0 مکانیسم‌های مختلفی را برای توزیع نشانه‌های دسترسی برای برنامه‌ها به نام «انواع اعطا» تعریف می‌کند. ابتدایی ترین نوع کمک مالی که توسط OAuth 2.0 تعریف شده است، "Credentials Client" نامیده می شود. در این نوع کمک هزینه، توکن‌های دسترسی OAuth در ازای اعتبار مشتری، که جفت‌های رمز مصرف‌کننده/مصرف‌کننده هستند، مانند مثال بالا، تولید می‌شوند.

نوع اعطای اعتبار مشتری در Edge با استفاده از سیاست‌های موجود در پراکسی‌های API پیاده‌سازی می‌شود. یک جریان OAuth معمولی شامل دو مرحله است:

  • با پروکسی API 1 تماس بگیرید تا یک رمز دسترسی OAuth از اعتبار مشتری ایجاد کنید. یک خط‌مشی OAuth v2.0 در پروکسی API این کار را انجام می‌دهد.
  • با پراکسی API 2 تماس بگیرید تا رمز دسترسی OAuth را در یک تماس API ارسال کنید. پروکسی API با استفاده از خط مشی OAuth v2.0، رمز دسترسی را تأیید می کند.

آنچه شما نیاز دارید

  • یک حساب Apigee Edge. اگر هنوز یکی را ندارید، می‌توانید با دستورالعمل‌های ایجاد حساب Apigee Edge ثبت‌نام کنید.
  • برای برقراری تماس‌های API از خط فرمان، cURL روی دستگاه شما نصب شده است.

یک پراکسی API تولید کننده رمز را دانلود و استقرار کنید

در این مرحله، پروکسی API را ایجاد می‌کنید که یک نشانه دسترسی OAuth را از کلید مصرف‌کننده و راز مصرف‌کننده ارسال شده در تماس API ایجاد می‌کند. Apigee نمونه پروکسی API را ارائه می دهد که این کار را انجام می دهد. اکنون پروکسی را دانلود و مستقر خواهید کرد، سپس بعداً در آموزش از آن استفاده کنید. (شما می توانید این پراکسی API را به راحتی خودتان بسازید. این مرحله دانلود و استقرار برای راحتی است و به شما نشان می دهد که اشتراک گذاری پراکسی هایی که قبلاً ایجاد شده اند چقدر آسان است.)

  1. فایل ZIP پروکسی API نمونه 'oauth' را در هر دایرکتوری در سیستم فایل خود دانلود کنید .
  2. به https://apigee.com/edge بروید و وارد شوید.
  3. Develop > API Proxies را در نوار ناوبری سمت چپ انتخاب کنید.
  4. روی + Proxy کلیک کنید.
    دکمه ایجاد پروکسی
  5. در جادوگر ایجاد پروکسی ، روی آپلود بسته پروکسی کلیک کنید.
  6. فایل oauth.zip را که دانلود کرده اید انتخاب کنید و روی Next کلیک کنید.
  7. روی ایجاد کلیک کنید.
  8. پس از تکمیل ساخت، روی ویرایش پراکسی کلیک کنید تا پروکسی جدید را در ویرایشگر پروکسی API مشاهده کنید.
  9. در صفحه نمای کلی ویرایشگر پروکسی API، روی منوی کشویی Deployment کلیک کنید و test را انتخاب کنید. این محیط آزمون در سازمان شما است.

    در درخواست تأیید، روی Deploy کلیک کنید.
    هنگامی که دوباره روی منوی کشویی Deployment کلیک می کنید، یک نماد سبز نشان می دهد که پروکسی در محیط آزمایش مستقر شده است.

موفق باشی! شما با موفقیت یک پراکسی API تولید کننده رمز دسترسی را در سازمان Edge خود دانلود و مستقر کرده اید.

جریان و خط مشی OAuth را مشاهده کنید

بیایید نگاهی دقیق‌تر به محتوای پراکسی API بیندازیم.

  1. در ویرایشگر پروکسی API، روی تب Develop کلیک کنید. در قسمت سمت چپ ناوبر ، دو خط مشی را مشاهده خواهید کرد. همچنین دو جریان POST را در بخش Proxy Endpoints مشاهده خواهید کرد.
  2. روی AccessTokenClientCredential زیر Proxy Endpoints کلیک کنید.

    در نمای کد XML، Flow به نام AccessTokenClientCredential را خواهید دید:

    <Flow name="AccessTokenClientCredential">
        <Description/>
        <Request>
            <Step>
                <Name>GenerateAccessTokenClient</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition>
    </Flow>

    جریان یک مرحله پردازش در یک پروکسی API است. در این حالت، جریان زمانی فعال می شود که یک شرط خاص برآورده شود (به آن جریان شرطی می گویند). شرطی که در عنصر <Condition> تعریف شده است، می گوید که اگر فراخوانی پراکسی API با منبع /accesstoken انجام شود و فعل درخواست POST باشد، سیاست GenerateAccessTokenClient را اجرا کنید که توکن دسترسی را تولید می کند.

  3. حال بیایید به سیاستی که جریان مشروط ایجاد می کند نگاه کنیم. روی نماد سیاست GenerateAccessTokenClient در نمودار جریان کلیک کنید.

    پیکربندی XML زیر در نمای کد بارگذاری می شود:

    <OAuthV2 name="GenerateAccessTokenClient">
        <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
        <Operation>GenerateAccessToken</Operation>
        <!-- This is in millseconds, so expire in an hour -->
        <ExpiresIn>3600000</ExpiresIn>
        <SupportedGrantTypes>
            <!-- This part is very important: most real OAuth 2.0 apps will want to use other
             grant types. In this case it is important to NOT include the "client_credentials"
             type because it allows a client to get access to a token with no user authentication -->
            <GrantType>client_credentials</GrantType>
        </SupportedGrantTypes>
        <GrantType>request.queryparam.grant_type</GrantType>
        <GenerateResponse/>
    </OAuthV2>

    پیکربندی شامل موارد زیر است:

    • <Operation> ، که می تواند یکی از چندین مقدار از پیش تعریف شده باشد، مشخص می کند که سیاست قرار است چه کاری انجام دهد. در این مورد، یک نشانه دسترسی ایجاد می کند.
    • توکن 1 ساعت (3600000 میلی ثانیه) پس از تولید منقضی می شود.
    • در <SupportedGrantTypes> ، OAuth <GrantType> مورد انتظار برای استفاده، client_credentials است (تبادل یک کلید مصرف کننده و راز برای یک نشانه OAuth).
    • عنصر دوم <GrantType> به خط مشی می گوید که در فراخوانی API برای پارامتر نوع اعطا، همانطور که در مشخصات OAuth 2.0 لازم است، کجا جستجو شود. (این را بعداً در تماس API خواهید دید). نوع کمک مالی همچنین می تواند در سربرگ HTTP ( request.header.grant_type ) یا به عنوان پارامتر فرم ( request.formparam.grant_type ) ارسال شود.

در حال حاضر نیازی به انجام کار دیگری با پروکسی API ندارید. در مراحل بعدی، از این پروکسی API برای ایجاد یک نشانه دسترسی OAuth استفاده خواهید کرد. اما ابتدا باید چند کار دیگر انجام دهید:

  • پروکسی API را که واقعاً می خواهید با OAuth ایمن کنید ایجاد کنید.
  • چند مصنوع دیگر ایجاد کنید که منجر به کلید مصرف‌کننده و راز مصرف‌کننده می‌شود که باید با یک نشانه دسترسی مبادله کنید.

پروکسی API محافظت شده با OAuth را ایجاد کنید

درباره "مکت هدف"

سرویس mocktarget در Apigee میزبانی می شود و داده های ساده را برمی گرداند. در واقع، شما می توانید در یک مرورگر وب به آن دسترسی داشته باشید. با کلیک کردن روی موارد زیر آن را امتحان کنید:

http://mocktarget.apigee.net/ip

هدف زمانی که در نهایت با این پروکسی API تماس می‌گیرید، چیزی را که باید ببینید را برمی‌گرداند.

همچنین می توانید http://mocktarget.apigee.net/help را بزنید تا سایر منابع API موجود در mocktarget را ببینید.

اکنون می خواهید پروکسی API را ایجاد کنید که می خواهید از آن محافظت کنید. این فراخوانی API است که چیزی را که شما می خواهید برمی گرداند. در این حالت، پروکسی API با سرویس mocktarget Apigee تماس می گیرد تا آدرس IP شما را برگرداند. اما، تنها در صورتی می‌توانید آن را ببینید که یک نشانه دسترسی معتبر OAuth را با تماس API خود ارسال کنید.

پروکسی API که در اینجا ایجاد می‌کنید شامل خط‌مشی است که نشانه OAuth را در درخواست بررسی می‌کند.

  1. Develop > API Proxies را در نوار ناوبری سمت چپ انتخاب کنید.
  2. روی + Proxy کلیک کنید.
    دکمه ایجاد پروکسی
  3. در جادوگر Build a Proxy ، Reverse proxy (متداول ترین) را انتخاب کنید و روی Next کلیک کنید.
  4. پروکسی را با موارد زیر پیکربندی کنید:
    در این زمینه این کار را انجام دهید
    نام پروکسی وارد کنید: helloworld_oauth2
    مسیر پایه پروژه

    تغییر به: /hellooauth2

    Project Base Path بخشی از URL مورد استفاده برای درخواست به پروکسی API است.

    API موجود

    وارد کنید: https://mocktarget.apigee.net/ip

    این نشانی اینترنتی هدفی را که Apigee Edge در یک درخواست به پراکسی API فراخوانی می‌کند، مشخص می‌کند.

    توضیحات وارد کنید: hello world protected by OAuth
  5. روی Next کلیک کنید.
  6. در صفحه سیاست های مشترک :
    در این زمینه این کار را انجام دهید
    امنیت: مجوز انتخاب کنید: OAuth 2.0
  7. روی Next کلیک کنید.
  8. در صفحه میزبان های مجازی ، روی Next کلیک کنید.
  9. در صفحه ساخت ، مطمئن شوید که محیط تست انتخاب شده است و روی Create and Deploy کلیک کنید.
  10. در صفحه خلاصه ، تأییدیه ای می بینید که پروکسی API جدید شما با موفقیت ایجاد شده است و پروکسی API در محیط آزمایشی شما مستقر شده است.
  11. روی ویرایش پراکسی کلیک کنید تا صفحه نمای کلی برای پراکسی API نمایش داده شود.
    توجه داشته باشید که این بار پراکسی API به طور خودکار مستقر می شود. روی منوی کشویی Deployment کلیک کنید تا مطمئن شوید که یک نقطه استقرار سبز در کنار محیط "تست" وجود دارد.

سیاست ها را مشاهده کنید

بیایید نگاهی دقیق تر به آنچه ایجاد کرده اید بیندازیم.

  1. در ویرایشگر پروکسی API، روی تب Develop کلیک کنید. خواهید دید که دو خط مشی به جریان درخواست پروکسی API اضافه شده است:
    • تأیید OAuth v2.0 Access Token – تماس API را بررسی می کند تا مطمئن شود که یک نشانه OAuth معتبر وجود دارد.
    • Remove Header Authorization – یک خط مشی AssignMessage که رمز دسترسی را پس از بررسی حذف می کند تا به سرویس هدف منتقل نشود. (اگر سرویس مورد نظر به نشانه دسترسی OAuth نیاز داشت، از این خط مشی استفاده نمی کردید).
  2. روی نماد Verify OAuth v2.0 Access Token در نمای جریان کلیک کنید و به XML زیر آن در قسمت کد نگاه کنید.

    <OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token">
        <DisplayName>Verify OAuth v2.0 Access Token</DisplayName>
        <Operation>VerifyAccessToken</Operation>
    </OAuthV2>

    توجه داشته باشید که <Operation> VerifyAccessToken است. عملیات مشخص می کند که سیاست قرار است چه کاری انجام دهد. در این مورد، یک توکن OAuth معتبر در درخواست بررسی می‌کند.

یک محصول API اضافه کنید

برای افزودن یک محصول API با استفاده از رابط کاربری Apigee:

  1. انتشار > محصولات API را انتخاب کنید.
  2. روی محصول +API کلیک کنید.
  3. جزئیات محصول را برای محصول API خود وارد کنید.
    میدان توضیحات
    نام نام داخلی محصول API. در نام کاراکترهای خاص را مشخص نکنید.
    توجه: پس از ایجاد محصول API نمی توانید نام را ویرایش کنید. به عنوان مثال، helloworld_oauth2-Product
    نام نمایشی نام نمایشی برای محصول API. نام نمایشی در رابط کاربری استفاده می‌شود و می‌توانید در هر زمان آن را ویرایش کنید. اگر مشخص نشده باشد، از مقدار Name استفاده خواهد شد. این فیلد با استفاده از مقدار Name به صورت خودکار پر می شود. می توانید محتوای آن را ویرایش یا حذف کنید. نام نمایشی می تواند شامل کاراکترهای خاص باشد. به عنوان مثال، helloworld_oauth2-Product .
    توضیحات توضیحات محصول API.
    محیط زیست محیط هایی که محصول API اجازه دسترسی به آنها را می دهد. محیطی را که پروکسی API را در آن مستقر کرده اید انتخاب کنید. مثلا test .
    دسترسی داشته باشید Public را انتخاب کنید.
    تأیید خودکار درخواست های دسترسی تأیید خودکار درخواست‌های کلیدی را برای این محصول API از هر برنامه فعال کنید.
    سهمیه برای این آموزش نادیده بگیرید.
    محدوده های OAuth مجاز برای این آموزش نادیده بگیرید.
  4. در قسمت پراکسی های API ، پراکسی API را که به تازگی ایجاد کرده اید انتخاب کنید.
  5. در قسمت Path "/" را وارد کنید. سایر زمینه ها را نادیده بگیرید.
  6. روی ذخیره کلیک کنید.

یک برنامه‌نویس و برنامه را به سازمان خود اضافه کنید

در مرحله بعد، شما می خواهید گردش کار یک توسعه دهنده را که برای استفاده از API های خود ثبت نام می کند، شبیه سازی کنید. در حالت ایده آل، توسعه دهندگان خود و برنامه هایشان را از طریق پورتال توسعه دهنده شما ثبت می کنند. با این حال، در این مرحله، یک برنامه‌نویس و یک برنامه را به عنوان سرپرست اضافه می‌کنید.

یک توسعه‌دهنده یک یا چند برنامه خواهد داشت که APIهای شما را فراخوانی می‌کنند و هر برنامه یک کلید مصرف‌کننده منحصربه‌فرد و راز مصرف‌کننده دریافت می‌کند. این کلید/مخفی برای هر برنامه همچنین به شما، ارائه‌دهنده API، کنترل دقیق‌تری بر دسترسی به APIها و گزارش‌های تجزیه و تحلیل دقیق‌تر در مورد ترافیک API می‌دهد، زیرا Edge می‌داند که کدام توسعه‌دهنده و برنامه متعلق به کد OAuth است.

یک توسعه دهنده ایجاد کنید

بیایید یک توسعه دهنده به نام Nigel Tufnel ایجاد کنیم.

  1. Publish > Developers را در منو انتخاب کنید.
  2. روی + Developer کلیک کنید.
  3. در پنجره New Developer موارد زیر را وارد کنید:
    در این زمینه وارد کنید
    نام Nigel
    نام خانوادگی Tufnel
    نام کاربری nigel
    ایمیل nigel@example.com
  4. روی ایجاد کلیک کنید.

ثبت یک اپلیکیشن

بیایید یک برنامه برای Nigel ایجاد کنیم.

  1. انتشار > برنامه ها را انتخاب کنید.
  2. روی + برنامه کلیک کنید.
  3. در پنجره برنامه جدید موارد زیر را وارد کنید:
    در این زمینه این کار را انجام دهید
    نام و نام نمایشی را وارد کنید: nigel_app
    توسعه دهنده روی Developer کلیک کنید و انتخاب کنید: Nigel Tufnel (nigel@example.com)
    URL و یادداشت های پاسخ به تماس خالی بگذارید
  4. در بخش محصولات ، روی افزودن محصول کلیک کنید.
  5. helloworld_oauth2-Product را انتخاب کنید.
  6. روی ایجاد کلیک کنید.

کلید مصرف کننده و راز مصرف کننده را دریافت کنید

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

  1. اطمینان حاصل کنید که صفحه nigel_app نمایش داده شده است. اگر نه، در صفحه برنامه‌ها (انتشار > برنامه‌ها)، روی nigel_app کلیک کنید.
  2. در صفحه nigel_app، روی نمایش در ستون های Key و Secret کلیک کنید. توجه داشته باشید که کلید/راز با "helloworld_oauth2-Product" مرتبط است که قبلاً به طور خودکار ایجاد شده است.

  3. کلید و راز را انتخاب و کپی کنید. آنها را در یک فایل متنی موقت جایگذاری کنید . در مرحله بعد از آنها استفاده خواهید کرد، جایی که با پروکسی API تماس می گیرید که این اعتبارنامه ها را با یک نشانه دسترسی OAuth مبادله می کند.

سعی کنید با API تماس بگیرید تا آدرس IP خود را دریافت کنید (شکست!)

فقط برای ضربه زدن، سعی کنید با پروکسی API محافظت شده که قرار است آدرس IP شما را برگرداند تماس بگیرید. دستور cURL زیر را در پنجره ترمینال و جایگزین نام سازمان Edge خود اجرا کنید. کلمه test در URL محیط آزمایشی سازمان شما است، محیطی که پراکسی های خود را در آن مستقر کرده اید. مسیر پایه پروکسی /hellooauth2 است، همان مسیری که هنگام ایجاد پروکسی مشخص کردید. توجه داشته باشید که در تماس، رمز دسترسی OAuth را ارسال نمی کنید.

curl https://ORG_NAME-test.apigee.net/hellooauth2

از آنجایی که پروکسی API دارای سیاست Verify OAuth v2.0 Access Token است که برای یک نشانه OAuth معتبر در درخواست بررسی می‌کند، تماس باید با پیام زیر با شکست مواجه شود:

{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

در این صورت شکست خوب است! این بدان معناست که پروکسی API شما بسیار امن تر است. فقط برنامه‌های مورد اعتماد دارای نشانه دسترسی OAuth معتبر می‌توانند با موفقیت این API را فراخوانی کنند.

یک نشانه دسترسی OAuth دریافت کنید

اکنون به نتیجه بزرگ می رسیم. شما در شرف استفاده از کلید و رمزی هستید که کپی کرده و در یک فایل متنی جایگذاری کرده اید و آنها را با یک نشانه دسترسی OAuth مبادله کنید. اکنون می‌خواهید یک فراخوانی API با پراکسی نمونه API که وارد کرده‌اید، oauth انجام دهید، که یک نشانه دسترسی API ایجاد می‌کند.

با استفاده از آن کلید و مخفی، تماس cURL زیر را انجام دهید (توجه داشته باشید که پروتکل https است)، نام سازمان Edge، کلید و راز خود را در جایی که مشخص شده است جایگزین کنید:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
"https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \
-d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"

توجه داشته باشید که اگر از سرویس گیرنده ای مانند Postman برای برقراری تماس استفاده می کنید، client_id و client_secret در Body درخواست قرار می گیرند و باید x-www-form-urlencoded باشند.

شما باید پاسخی مانند این دریافت کنید:

{
  "issued_at" : "1466025769306",
  "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[helloworld_oauth2-Product]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "nigel@example.com",
  "token_type" : "BearerToken",
  "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW",
  "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0",
  "organization_name" : "myOrg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

رمز دسترسی OAuth خود را دریافت کردید! مقدار access_token را (بدون علامت نقل قول) کپی کرده و در فایل متنی خود قرار دهید. در یک لحظه از آن استفاده خواهید کرد.

چه اتفاقی افتاد؟

به یاد داشته باشید که قبلاً به جریان مشروط در پروکسی oauth نگاه می‌کردید، جریانی که می‌گفت اگر URI منبع /accesstoken و فعل درخواست POST است، برای اجرای سیاست GenerateAccessTokenClient OAuth که یک نشانه دسترسی ایجاد می‌کند؟ دستور cURL شما این شرایط را دارد، بنابراین خط مشی OAuth اجرا شد. کلید مصرف کننده و راز مصرف کننده شما را تأیید کرد و آنها را با یک توکن OAuth که 1 ساعت دیگر منقضی می شود مبادله کرد.

با یک نشانه دسترسی با API تماس بگیرید (موفقیت!)

اکنون که یک نشانه دسترسی دارید، می توانید از آن برای فراخوانی پراکسی API استفاده کنید. تماس cURL زیر را برقرار کنید. نام سازمان Edge و نشانه دسترسی را جایگزین کنید.

curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"

اکنون باید یک تماس موفقیت آمیز با پروکسی API دریافت کنید که آدرس IP شما را برمی گرداند. به عنوان مثال:

{"ip":"::ffff:192.168.14.136"}

می توانید آن فراخوانی API را نزدیک به یک ساعت تکرار کنید و پس از آن زمان توکن دسترسی منقضی می شود. برای برقراری تماس پس از یک ساعت، باید با استفاده از مراحل قبلی یک رمز دسترسی جدید ایجاد کنید.

تبریک می گویم! شما یک پروکسی API ایجاد کرده‌اید و از آن محافظت کرده‌اید که باید یک نشانه دسترسی معتبر OAuth در تماس گنجانده شود.

موضوعات مرتبط