Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Cải thiện bài viết

    Lưu bài viết

    Đọc

    Bàn luận

    Xác thực đề cập đến việc cung cấp quyền của người dùng để truy cập vào một tài nguyên cụ thể. Vì, mọi người đều có thể được phép truy cập dữ liệu từ mỗi URL, người ta sẽ yêu cầu xác thực chủ yếu. Để đạt được xác thực này, thông thường, người ta cung cấp dữ liệu xác thực thông qua tiêu đề ủy quyền hoặc tiêu đề tùy chỉnh được xác định bởi máy chủ.

    Thí dụ -

    https://cat-fact.herokuapp.com/facts
    0
    https://cat-fact.herokuapp.com/facts
    1

    import requests
    api_endpoint = "https://cat-fact.herokuapp.com/facts"
    response = requests.get(
        api_endpoint
    )
    for idx, item in enumerate(response.json()):
        print(f"{idx+1}. {item['text']}")
    4
    import requests
    api_endpoint = "https://cat-fact.herokuapp.com/facts"
    response = requests.get(
        api_endpoint
    )
    for idx, item in enumerate(response.json()):
        print(f"{idx+1}. {item['text']}")
    5

    https://cat-fact.herokuapp.com/facts
    2
    https://cat-fact.herokuapp.com/facts
    3
    https://cat-fact.herokuapp.com/facts
    0
    https://cat-fact.herokuapp.com/facts
    5
    Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?

    If you an invalid username or password, it will return an error as –
    Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?

    Các

    Thay thế người dùng của người dùng và người dùng và truyền qua tên người dùng và mật khẩu của bạn. Nó sẽ xác thực yêu cầu và trả về một phản hồi 200 nếu không nó sẽ trả về lỗi 403. Nếu bạn là tên người dùng hoặc mật khẩu không hợp lệ, nó sẽ trả về một lỗi là -
    Another very popular form of HTTP Authentication is Digest Authentication, and Requests supports this out of the box as well:

    >>> from requests.auth import HTTPDigestAuth
    >>> url = 'https://httpbin.org/digest-auth/auth/user/pass'
    >>> requests.get(url, auth=HTTPDigestAuth('user', 'pass'))
    

    Các loại xác thực
    A common form of authentication for several web APIs is OAuth. The requests-oauthlib library allows Requests users to easily make OAuth 1 authenticated requests:

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    

    DIGEST Xác thực khác nhau hình thức xác thực HTTP rất phổ biến là xác thực tiêu hóa và các yêu cầu cũng hỗ trợ điều này ra khỏi hộp:

    OAuth 1 Xác thực hình thức xác thực chung cho một số API Web là OAuth. Thư viện yêu cầu-OAUthlib cho phép người dùng yêu cầu dễ dàng thực hiện các yêu cầu được xác thực OAuth 1:
    The requests-oauthlib library also handles OAuth 2, the authentication mechanism underpinning OpenID Connect. See the requests-oauthlib OAuth2 documentation for details of the various OAuth 2 credential management flows:

    • Để biết thêm thông tin về cách thức hoạt động của OAuth Flow, vui lòng xem trang web OAuth chính thức. Để biết ví dụ và tài liệu về yêu cầu-OAuthlib, vui lòng xem kho lưu trữ yêu cầu_oauthlib trên GitHub
    • OAuth 2 và OpenID Connect Xác thực Yêu cầu-Oauthlib cũng xử lý OAuth 2, cơ chế xác thực làm nền tảng cho OpenID Connect. Xem tài liệu Yêu cầu-OAUthlib OAuth2 để biết chi tiết về các luồng quản lý thông tin OAuth 2 khác nhau:
    • Dòng ứng dụng web
    • Dòng ứng dụng di động

    Dòng ứng dụng kế thừa
    Requests is designed to allow other forms of authentication to be easily and quickly plugged in. Members of the open-source community frequently write authentication handlers for more complicated or less commonly-used forms of authentication. Some of the best have been brought together under the Requests organization, including:

    • Lưu lượng ứng dụng phụ trợ
    • NTLM.

    Các trình xác thực khác được thiết kế để cho phép các hình thức xác thực khác dễ dàng và nhanh chóng cắm vào. Thành viên của cộng đồng nguồn mở thường xuyên viết trình xử lý xác thực cho các hình thức xác thực phức tạp hoặc ít được sử dụng hơn. Một số điều tốt nhất đã được kết hợp với nhau theo tổ chức yêu cầu, bao gồm:

    Trong bài viết này, chúng tôi sẽ làm việc với 5 API khác nhau sử dụng các loại xác thực khác nhau. Chúng tôi sẽ sử dụng Python để tiêu thụ API.

    Không phải tất cả các API đều được ghi lại như Twilio. Hướng dẫn này sẽ giúp bạn làm việc với các API được bảo mật bằng cách sử dụng các khóa, Basicauth hoặc OAuth2.

    Chúng tôi sẽ làm việc với các API sau

    • Sự thật về mèo
    • Cat As A Service (CAAS)
    • API Twilio
    • API GitHub
    • API thiên tài

    Bạn có thể tìm thấy mã nguồn ở đây

    Mục lục

    • API không an toàn
    • Đọc các giá trị từ.Env Tệp
    • API với chìa khóa
    • API với cơ bản auth
    • Bao bọc API
    • Đối tượng phiên
    • API được bảo đảm qua OAuth2
    • Sử dụng API GitHub (OAuth2)
    • Sử dụng API thiên tài (OAuth2)

    Một số quen thuộc với thư viện yêu cầu được mong đợi. Nếu bạn cần bồi dưỡng, bạn có thể tham khảo bài viết trước của tôi.

    API không an toàn

    Đọc các giá trị từ.Env Tệp

    https://cat-fact.herokuapp.com/facts

    API với chìa khóa

    import requests
    api_endpoint = "https://cat-fact.herokuapp.com/facts"
    response = requests.get(
        api_endpoint
    )
    for idx, item in enumerate(response.json()):
        print(f"{idx+1}. {item['text']}")

    API với cơ bản auth

    Bao bọc API

    Đối tượng phiênpython-dotenv library.

    pip install python-dotenv

    API được bảo đảm qua OAuth2

    API_TOKEN = "SOME API TOKEN"

    Sử dụng API GitHub (OAuth2)

    from dotenv import load_dotenv
    import os 
    
    load_dotenv()
    API_TOKEN = os.environ.get("API_TOKEN")

    Sử dụng API thiên tài (OAuth2)get function accepts a variable name stored in the .env file as an argument.

    API với chìa khóa

    API với cơ bản auth

    from dotenv import load_dotenv
    import os 
    import requests
    
    api_endpoint = "https://api.thecatapi.com/v1/breeds"
    
    load_dotenv()
    CAT_API_KEY = os.environ.get("CAT_API_KEY")
    
    headers = {
        "x-api-key" : CAT_API_KEY
    }
    response = requests.get(
        api_endpoint,
        headers = headers
    )
    
    for idx, item in enumerate(response.json()):
        print(f"{idx+1}. {item['name']} : {item['description']}")

    Bao bọc APIheaders to store the API Key. The key in the dictionary is “x-api-key”. However, this can differ based on the API you are working with. Some APIs require the key to be named “Authorization”, “authorization”, “token”. It is best to refer to your API’s documentation’s authentication section.

    Đối tượng phiên

    headers = {
        "authorization": f"Bearer {access_token}"
    }

    API được bảo đảm qua OAuth2

    API với cơ bản auth

    Bao bọc API

    Đối tượng phiên

    from requests.auth import HTTPBasicAuth
    from dotenv import load_dotenv
    import os 
    import requests
    
    load_dotenv()
    TWILIO_ACCOUNT_SID = os.environ.get("TWILIO_ACCOUNT_SID")
    TWILIO_ACCOUNT_TOKEN = os.environ.get("TWILIO_ACCOUNT_TOKEN")
    
    api_endpoint = f'https://api.twilio.com/2010-04-01/Accounts/{TWILIO_ACCOUNT_SID}/Calls.json?PageSize=5'
    
    auth = HTTPBasicAuth(TWILIO_ACCOUNT_SID, TWILIO_ACCOUNT_TOKEN)
    
    response = requests.get(api_endpoint , auth = auth)
    
    for idx, item in enumerate(response.json()['calls']):
        print(f"{idx+1}. {item['duration']}")

    API được bảo đảm qua OAuth2HTTPBasicAuth. It takes in the username and password respectively as arguments. This instance is passed as an argument when making the request. In the case of twilio, the username is your account sid and the password is your account token. As mentioned before, it can be different for different APIs. If the API you are using, uses Basic Auth to secure its endpoints, refer to the docs for the username and password.

    Bao bọc API

    Đối tượng phiên

    API được bảo đảm qua OAuth2

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    0

    Sử dụng API GitHub (OAuth2)

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    1

    Sử dụng API thiên tài (OAuth2)

    Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?

    Thật không may, không phải tất cả các API đều có một trình bao bọc. Tuy nhiên, rất nhiều trong số họ làm. Trước một người tiêu dùng, API trực tiếp, hãy thử tìm kiếm một trình bao bọc xung quanh nó. Điều này sẽ làm cho nó dễ dàng hơn đáng kể để làm việc với API.

    Đối tượng phiên

    Thay vì chuyển phím API hoặc phiên bản httpbasicauth mỗi khi bạn thực hiện yêu cầu đến điểm cuối API được bảo mật, bạn có thể tạo đối tượng phiên. Bạn phải xác thực một lần và có thể đưa ra các yêu cầu mà không cần phải chuyển khóa hoặc phiên bản xác thực.

    Chúng tôi sẽ làm việc với API GitHub được bảo mật bằng Basicauth. Tên người dùng sẽ là tên người dùng GitHub của bạn và mật khẩu là mã thông báo truy cập cá nhân của bạn. Bạn có thể nhận được một bằng cách làm theo hướng dẫn này.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    2

    Sau khi tôi đặt giá trị Auth Auth phiên thành phiên bản HTTPBASICUTH, tôi chỉ có thể thực hiện các yêu cầu mà không cần truyền xác thực mỗi lần. Các yêu cầu của chúng tôi vẫn đang được xác thực, nhưng đối tượng phiên xử lý nó.

    API được bảo đảm qua OAuth2

    Sử dụng luồng web OAuth2 để xác thực thường được sử dụng trong các ứng dụng Flask/Django khi bạn cần đăng ký bằng cách sử dụng Google, đăng ký sử dụng tùy chọn Facebook. Tuy nhiên, một số API cần OAuth2 cho tất cả các điểm cuối của họ. API GitHub cũng hỗ trợ xác thực OAuth2. Chúng tôi cũng sẽ nói về API thiên tài. Mặc dù nó hỗ trợ xác thực dựa trên khóa, điểm cuối của nó yêu cầu OAuth2, nhưng có thể nhận được mã thông báo và xác thực bản thân bằng cách truyền khóa trong đối tượng tiêu đề. Tuy nhiên, chúng tôi sẽ sử dụng luồng web OAuth2 để xác thực chính mình.

    Tôi đã giành chiến thắng khi đi quá nhiều về cách thức hoạt động của OAuth2 vì điều đó nằm ngoài phạm vi của bài viết này. Dưới đây là một tổng quan cấp cao. Nếu nó không có ý nghĩa, hãy bỏ qua phần API GitHub hoặc Genius và nó sẽ có ý nghĩa hơn.

    • Chúng tôi sẽ phải tạo một ứng dụng khách hàng trên trang web API
    • Ứng dụng khách sẽ có ID máy khách và bí mật của khách hàng
    • Chúng tôi sẽ phải đưa ra yêu cầu cho điểm cuối xác thực API. ID máy khách và bí mật khách hàng sẽ được truyền dưới dạng tham số truy vấn.
    • Điểm cuối xác thực sẽ xin phép và sẽ phải được ủy quyền
    Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?
    • Sau khi được ủy quyền, nó sẽ trả lại một mã
    • Mã này sẽ phải được trao cho một điểm cuối khác sẽ trao đổi nó để có mã thông báo truy cập.
    • Mã thông báo truy cập này hiện có thể được sử dụng làm khóa và được truyền dưới dạng đối tượng tiêu đề khi thực hiện các yêu cầu đến điểm cuối.

    Hãy cùng xem một vài ví dụ.

    Sử dụng API GitHub (OAuth2)

    Như đã đề cập ở trên, OAuth2 chủ yếu được sử dụng với các ứng dụng Flask/Django. Khi làm việc với OAuth2, bạn sẽ cần một URL ứng dụng web và URL để chuyển hướng người dùng một lần họ ủy quyền/cấp phép. Vì chúng tôi không có ứng dụng web, chúng tôi không có bất kỳ URL nào. Tuy nhiên, chúng tôi có thể sử dụng httpbin. Bất cứ khi nào chúng tôi cần một URL, chúng tôi có thể sử dụng URL sau

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    3

    Đầu tiên, bạn sẽ phải tạo một ứng dụng GitHub. Khi được yêu cầu URL ứng dụng web hoặc URL chuyển hướng, hãy sử dụng URL được thảo luận ở trên. Khi bạn đã tạo ứng dụng, hãy lưu trữ ID máy khách và bí mật máy khách trong tệp .ENV.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    4

    Một vài dòng đầu tiên là nhập thư viện và tải thông tin đăng nhập từ tệp .env. Từ điển tham số chứa ID máy khách, URL chuyển hướng là URL HTTPBIN mà chúng tôi đã thảo luận trước đó và phạm vi. Giá trị của phạm vi xác định các điểm cuối bạn có thể truy cập và các hành động động từ HTTP bạn có thể làm.

    Chúng tôi tạo một URL cùng với tham số truy vấn và mở nó trong trình duyệt bằng thư viện Webbrowser. Tập lệnh Pythons chờ sử dụng đầu vào mã của chúng tôi,webbrowser library. The Pythons script waits for use the input our code,

    Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?

    Khi bạn nhấp vào ủy quyền, bạn nên được chuyển hướng đến URL HTTPBIN và đối tượng JSON sẽ được hiển thị. Nhìn vào giá trị cho khóa mã khóa. Giá trị này sẽ được trao đổi cho mã thông báo API. Nhập mã.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    5

    Một lần, chúng tôi nhận được mã, chúng tôi thực hiện một yêu cầu khác đến điểm cuối để có mã thông báo truy cập. Lần này chúng tôi vượt qua mã cùng với Bí mật máy khách là tham số. Sau khi GitHub xác nhận thông tin đăng nhập cùng với mã, nó sẽ trả về mã thông báo truy cập. Mã thông báo truy cập này có thể được sử dụng làm khóa API.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    6

    Sử dụng API thiên tài (OAuth2)

    Hãy cùng xem một ví dụ khác. Tôi sẽ bỏ qua phần mà chúng tôi nhập thư viện và tải thông tin đăng nhập.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    7

    Phản hồi của người Viking_type là bắt buộc đối với một số API, giá trị phải luôn luôn là mã

    Hướng dẫn how do i authenticate api in python? - làm cách nào để xác thực api trong python?

    Sau khi chúng tôi ủy quyền, chúng tôi sẽ thấy một đối tượng JSON tương tự như người chúng tôi đã thấy khi làm việc với API GitHub. Nhập mã.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    8

    Một số API Grant_Type cũng được yêu cầu bởi một số API. Giá trị luôn luôn là ủy quyền của Google_code. Sau khi mã của chúng tôi được xác thực, chúng tôi nhận được mã thông báo truy cập. Mã thông báo này có thể được sử dụng làm khóa API.

    >>> import requests
    >>> from requests_oauthlib import OAuth2
    
    >>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
    >>> auth = OAuth2('YOUR_APP_KEY', 'YOUR_APP_SECRET',
    ...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
    
    >>> requests.get(url, auth=auth)
    
    9

    Sự kết luận

    Tôi hy vọng bài viết này phục vụ như một hướng dẫn tốt để làm việc với API trong Python. Trước khi tiêu thụ API trực tiếp, luôn luôn tìm kiếm một trình bao bọc. 5 phút bạn dành để tìm kiếm một trình bao bọc có thể giúp bạn tiết kiệm hàng giờ đau đầu.

    Kết nối với tôi trên LinkedIn, Twitter

    Tài nguyên

    GitHub repo

    https://github.com/rahulbanerjee26/python_apis


    Tò mò về việc blog của tôi kiếm được bao nhiêu vào tháng trước 💵 hoặc blog của tôi đã tăng bao nhiêu trong tháng trước 📈?Hoặc có thể bạn chỉ muốn nhìn vào một số meme như thế này?Hoặc bạn muốn tìm hiểu về một số repos github thú vị?Trong mọi trường hợp, đăng ký nhận bản tin của tôi.

    Đọc thêm các bài viết tại RealPythonProject.Bạn sẽ tìm thấy các ý tưởng và hướng dẫn dự án liên quan đến phát triển phần mềm

    Bạn có thể hỗ trợ tôi bằng cách mua cho tôi một ly cà phê trên kofi ☕