Làm cách nào để xác minh mã thông báo mang của tôi?

Khi bạn gọi proxy API trên Apigee Edge có bảo mật OAuth, Edge chịu trách nhiệm xác minh mã thông báo truy cập. Hãy coi Edge là người gác cổng -- không lệnh gọi API nào có thể đi qua mà không có mã thông báo truy cập có thể được xác minh

Mẹo. Khi xác minh mã thông báo truy cập, nếu bạn tình cờ thấy lỗi này. "Lệnh gọi API không hợp lệ do không tìm thấy sản phẩm phù hợp", hãy truy cập bài viết này của Cộng đồng Apigee để biết chi tiết về nguyên nhân gây ra lỗi này và các bước khắc phục lỗi

Thêm chính sách VerifyAccessToken

Để định cấu hình xác minh mã thông báo, hãy đặt chính sách OAuthV2 với thao tác VerifyAccessToken ngay từ đầu luồng proxy API [phần đầu của luồng trước ProxyEndpoint]. Nếu được đặt ở đó, mã thông báo truy cập sẽ được xác minh trước khi bất kỳ quá trình xử lý nào khác diễn ra và nếu mã thông báo bị từ chối, Edge sẽ dừng xử lý và trả lại lỗi cho máy khách

  1. Truy cập trang proxy API, như được mô tả bên dưới

    Bờ rìa

    Để truy cập trang proxy API bằng giao diện người dùng Edge

    1. Đăng nhập vào apigee. com/cạnh
    2. Chọn Phát triển > Proxy API ở thanh điều hướng bên trái

    Cạnh cổ điển [Đám mây riêng]

    Ghi chú. Giao diện người dùng Classic Edge chỉ khả dụng với Edge for Private Cloud

    Để truy cập trang proxy API bằng giao diện người dùng Classic Edge

    1. Đăng nhập vào
      -H "Authorization: Bearer Rft3dqrs56Blirls56a"
      
      4, trong đó ms-ip là địa chỉ IP hoặc tên DNS của nút Máy chủ quản lý
    2. Chọn API > Proxy API trong thanh điều hướng trên cùng

  2. Từ danh sách, chọn proxy bạn muốn bảo vệ
  3. Trong trang tổng quan, nhấp vào tab Phát triển
  4. Trong Bộ điều hướng, chọn PreFlow cho điểm cuối được liệt kê trong Điểm cuối proxy. Thông thường, điểm cuối bạn muốn được gọi là "mặc định", mặc dù có thể tạo nhiều điểm cuối proxy. Nếu bạn có nhiều điểm cuối, có thể bạn sẽ muốn làm theo các bước sau để thực hiện xác minh mã thông báo trên từng điểm cuối


  5. Trong trình chỉnh sửa luồng proxy, nhấp vào + Bước


  6. Chọn Phiên bản chính sách Mới
  7. Từ danh sách chính sách, chọn OAuth v2. 0
  8. Tùy chọn, thay đổi tên chính sách và tên hiển thị. Ví dụ: để dễ đọc hơn, bạn có thể thay đổi cả tên hiển thị và tên thành "VerifyAccessToken"
  9. Nhấp vào Thêm

Chính sách mặc định đã được định cấu hình với thao tác VerifyAccessToken, vì vậy bạn không phải làm gì thêm


    OAuth v2.0 1
    
    
    
    false
    VerifyAccessToken
    
    
    

Lưu ý. Theo mặc định, VerifyAccessToken mong muốn mã thông báo truy cập được gửi trong tiêu đề Ủy quyền dưới dạng mã thông báo Bearer. Ví dụ.
-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Bạn có thể thay đổi giá trị mặc định này trong phần tử

-H "Authorization: Bearer Rft3dqrs56Blirls56a"
5 trong chính sách OAuthV2, như được giải thích trong tài liệu chính sách OAuthV2

Trong một thế giới ngày càng nguy hiểm, nơi các vụ hack và vi phạm ngày càng trở nên phổ biến, các nhà phát triển phải nắm vững các tính năng bảo mật có sẵn. Đối với hầu hết các dịch vụ ứng dụng đưa dữ liệu lên web, thông thường sẽ có cơ chế xác thực bảo vệ tài nguyên. Tuy nhiên, mặc dù có rất nhiều cơ chế bảo mật mạnh mẽ và tinh vi, nhiều cơ chế vẫn bị định cấu hình sai, không đầy đủ hoặc thậm chí đôi khi không có.

Trong bài viết này, chúng ta sẽ thảo luận về một trong những cơ chế phổ biến nhất và đã được thử nghiệm để bảo mật thông tin liên lạc giữa người dùng và dịch vụ của bạn. mã thông báo truy cập và xác thực mã thông báo

Đầu tiên, chúng tôi sẽ giải thích mã thông báo truy cập là gì và xác thực mã thông báo là gì. Sau đó, chúng tôi sẽ giải thích khi xác thực mã thông báo là cách hành động tốt nhất và khi nào thì không. Tiếp theo, chúng tôi sẽ hướng dẫn bạn quy trình thiết lập cơ chế xác thực mã thông báo đơn giản trên ứng dụng NodeJS. Cuối cùng, chúng ta sẽ khám phá tiêu chuẩn JSON Web Token [JWT] để biết cơ chế xác thực an toàn hơn và hướng dẫn bạn cách triển khai cơ chế đó

Mã thông báo truy cập là gì?

Mã thông báo truy cập là các khóa dùng làm cơ sở để xác nhận tính xác thực của người dùng hoặc các đặc quyền của họ trong một ứng dụng. Nói một cách đơn giản hơn, mã thông báo truy cập là một chuỗi dữ liệu, thường được mã hóa theo một cách nào đó, chứa thông tin về danh tính của người dùng. Thông tin này, mặc dù được mã hóa, không được bao gồm thông tin xác thực nhạy cảm

Mã thông báo truy cập là một chuỗi dữ liệu, thường được mã hóa theo một cách nào đó, chứa thông tin về danh tính của người dùng

Mục đích của mã thông báo truy cập không nhất thiết là để xác thực người dùng theo yêu cầu mà để dùng làm bằng chứng xác thực trước đó. Đó là lý do tại sao mã thông báo truy cập có thời hạn hết hạn kèm theo và được yêu cầu làm mới bằng cách xác thực lại người dùng hoặc bất kỳ cơ chế nào khác. Ngoài ra, mã thông báo truy cập là cơ chế được ưu tiên để bảo mật thông tin liên lạc giữa người dùng và API cung cấp dữ liệu dựa trên vai trò hoặc đặc quyền của người dùng

Vì bạn có thể liên kết mã thông báo với dữ liệu người dùng nên việc sử dụng cơ chế này sẽ thuận tiện để giảm chi phí giao dịch cơ sở dữ liệu mà API cần để xử lý yêu cầu

Một ví dụ đơn giản về mã thông báo truy cập sẽ là một UUID hoặc số nhận dạng duy nhất chung mà bạn có thể liên kết với sổ đăng ký người dùng trong cơ sở dữ liệu và có ngày hết hạn được liên kết với nó

Xác thực mã thông báo là gì?

Xác thực mã thông báo là cơ chế mà API xác thực tính xác thực và tuổi thọ của mã thông báo truy cập. Cơ chế xác thực mã thông báo khác nhau giữa các ứng dụng, nhưng phần lớn, cơ chế này bao gồm giải mã tải trọng, phân tích cú pháp các thuộc tính và thực hiện thêm các truy vấn để xác thực thông tin xác thực. Xác thực này, trong một dịch vụ API tiêu chuẩn, sẽ xảy ra trước khi bất kỳ yêu cầu nào đến điểm cuối. Ngoài ra, yêu cầu này sẽ phát sinh một số cơ chế lọc để ngăn truy cập vào các tài nguyên nhạy cảm và chi phí không cần thiết

Sau khi máy chủ nhận được mã thông báo và lọc yêu cầu một cách thích hợp, API có thể xác nhận loại đặc quyền mà yêu cầu có đối với điểm cuối. Để làm điều này, một số API sử dụng thông tin phạm vi có trong mã thông báo. Hơn nữa, máy chủ sau đó trả lại mã thông báo cho người dùng trên mỗi phản hồi để duy trì quyền truy cập vào API. Máy chủ có thể thay đổi mã thông báo này trên mỗi phản hồi, tùy thuộc vào nhu cầu bảo mật của dịch vụ

Khi nào bạn cần xác thực mã thông báo?

Bạn nên triển khai xác thực mã thông báo bất cứ khi nào bạn tiết lộ dữ liệu nhạy cảm cho người dùng. Ngoài việc đảm bảo rằng người dùng được xác thực, việc triển khai các cơ chế bảo mật phù hợp như JWT và xác thực mã thông báo nói chung là bắt buộc để ngăn chặn các tác nhân xấu khai thác người dùng của bạn. Ngoài ra, việc có một lớp xác thực mạnh mẽ và đáng tin cậy có thể ngăn chặn việc khai thác tính khả dụng và ổn định của dịch vụ của bạn

Bạn phải xem xét cẩn thận việc xây dựng một cơ chế để đảm bảo rằng chỉ những người phù hợp mới có quyền truy cập vào nó

Nếu bạn có API trả về thông tin cho khách hàng và thông tin đó có khả năng nhạy cảm, thì bạn phải cân nhắc cẩn thận việc xây dựng cơ chế để đảm bảo rằng chỉ những người phù hợp mới có quyền truy cập vào thông tin đó. Ngược lại, nếu API của bạn hoặc điểm cuối trong đó chỉ trả về thông tin có sẵn công khai và không có giá trị tiềm năng để khai thác, thì bạn không nên thêm cơ chế xác thực mã thông báo. Điều này là do nó sẽ gây thêm căng thẳng cho máy chủ của bạn mà không có mục đích thực sự. Ngoài ra, việc thêm các bước bổ sung để người dùng truy cập dịch vụ của bạn có thể gây hại cho doanh nghiệp của bạn

JWT là gì?

Theo trang web JWT, "JSON Web Token [JWT] là một tiêu chuẩn mở [RFC 7519] xác định một cách nhỏ gọn và khép kín để truyền thông tin an toàn giữa các bên dưới dạng đối tượng JSON. Thông tin này có thể được xác minh và tin cậy vì máy chủ đã ký điện tử vào thông tin đó. JWT có thể được ký bằng bí mật [với thuật toán HMAC] hoặc cặp khóa công khai/riêng tư bằng cách sử dụng RSA hoặc ECDSA. "

Điều này có nghĩa là JWT là tiêu chuẩn mã thông báo bảo mật được sử dụng để xác thực và nâng cao giao dịch giữa dịch vụ và khách hàng. Mã thông báo này chứa thông tin JSON có thể được ánh xạ vào một đối tượng chứa dữ liệu để duy trì cơ chế ủy quyền giữa các thực thể và giảm nhu cầu giao dịch cơ sở dữ liệu đắt tiền

Được rồi, bây giờ chúng ta đã khám phá lý thuyết, đã đến lúc viết mã một ví dụ thực tế về xác thực mã thông báo. Đối với điều này, chúng tôi sẽ sử dụng Node. js, Express và npm để xây dựng một máy chủ barebones chấp nhận các lần thử đăng nhập, tạo mã thông báo JWT và lọc các yêu cầu xác thực. Chúng ta hãy đi đến đó

Thiết lập xác thực mã thông báo

Đầu tiên, tạo một tệp JavaScript mới và gọi nó là "index. js. " Bạn có thể đặt tệp này vào thư mục có tên "JWTTokenTest" hoặc bất kỳ thứ gì bạn muốn

Bây giờ thêm đoạn mã sau vào tập tin này

const express = require["express"]
const bodyParser = require["body-parser"]
const cookieParser = require["cookie-parser"]

const app = express[]
app.use[bodyParser.json[]]
app.use[cookieParser[]]

app.listen[8000]

Mã này là Node xương sống của bạn. máy chủ js. Nó chứa tất cả mã cần thiết để bắt đầu một máy chủ mới và nhận yêu cầu

Trước khi làm điều đó, bạn cần tạo "gói. json" và cài đặt các phụ thuộc nút được sử dụng trong mã này. Để làm điều đó, tất cả những gì bạn phải làm là vào terminal, di chuyển đến thư mục chứa "chỉ mục" của bạn. js" là và chạy lệnh sau

$ npm init

Thao tác này sẽ kích hoạt một trình hướng dẫn thiết lập ngắn giúp bạn tạo "gói. json", chứa các cài đặt cho Nút của bạn. dự án js. Bạn chỉ cần nhấn Enter trên tất cả các lời nhắc nếu bạn không biết chúng làm gì

Nhân tiện, nếu bạn chưa cài đặt npm hoặc Node, bạn có thể tìm thấy nó tại đây

Khi bạn hoàn thành việc này, bạn sẽ tìm thấy "gói. json" trong thư mục có tất cả các cài đặt cần thiết. Tuyệt quá

Thiết lập nút

Bây giờ hãy quay lại thiết bị đầu cuối và nhập các lệnh sau để cài đặt các phụ thuộc được chỉ định trong mã bạn đã thêm vào "chỉ mục. tập tin js"

$ npm install express

$ npm install body-parser

$ npm install cookie-parser

Sau đó tiếp tục và chạy mã của bạn. Trong trình duyệt của bạn, bạn có thể truy cập https. //máy chủ cục bộ. 8000 và kiểm tra công việc của bạn

Ngoại trừ không có gì để xem. Máy chủ barebones của bạn vẫn cần thêm một số thứ

Bây giờ, hãy tạo một tệp thứ hai—bạn có thể gọi nó là "trình xử lý. js" nếu bạn muốn— và thêm đoạn mã sau

const jwt = require["jsonwebtoken"]

const jwtKey = "SECRET"
const jwtExpirySeconds = 300

const users = {
user1: "password1",
user2: "password2",
}

Lưu ý rằng có một biến giữ khóa gọi là "jwtKey. " Khóa bí mật này sẽ được sử dụng để tạo và mã hóa mã thông báo và cần được bảo vệ bằng mọi giá. Tuy nhiên, với mục đích của ví dụ này, bạn có thể giữ nguyên như vậy

Ngoài ra, có một biến cho biết thời gian hết hạn của mã thông báo tính bằng giây. Bạn có thể sử dụng cái này sau cho mục đích cấu hình. Bạn có thể thiết lập điều này để đáp ứng nhu cầu của bạn. Ngoài ra, có một từ điển xác định hai tài khoản người dùng cơ bản. Một lần nữa, chúng tôi sẽ sử dụng điều này để kiểm tra mã thông báo truy cập sau

Bây giờ bạn cần cài đặt phần phụ thuộc mới mà chúng tôi đã thêm vào dự án. Trong trường hợp này, nó được gọi là "jsonwebtoken" và đó là một thư viện gói đơn giản nhưng mạnh mẽ quản lý các cơ chế xác thực mã thông báo JWT với rất ít dòng mã

Để cài đặt phần phụ thuộc, chỉ cần chạy lệnh sau trong terminal

$ npm install jsonwebtoken

Xuất sắc

Xác thực tòa nhà

Tiếp theo, bạn cần thêm các phương thức sẽ xử lý các yêu cầu khác nhau cần thiết để xác thực và ủy quyền. Trong trường hợp này, chúng sẽ là "đăng nhập", "chào mừng" và "làm mới. "

Đây là mã cho ba phương pháp. Bạn có thể thêm chúng vào "trình xử lý. tập tin js"

const signIn = [req, res] => {
// Get credentials from JSON body
const { username, password } = req.body

if [!username || !password || users[username] !== password] {
// return 401 error is username or password doesn't exist, or if password does
// not match the password in our records
return res.status[401].end[]
}

// Create a new token with the username in the payload
// and which expires 300 seconds after issue
const token = jwt.sign[{ username }, jwtKey, {
algorithm: "HS256",
expiresIn: jwtExpirySeconds,
}]

console.log["token:", token]

// set the cookie as the token string, with a similar max age as the token
// here, the max age is in milliseconds, so we multiply by 1000
res.cookie["token", token, { maxAge: jwtExpirySeconds * 1000 }]
res.end[]
}

const welcome = [req, res] => {
// We can obtain the session token from the requests cookies, which come with every request
const token = req.cookies.token

// if the cookie is not set, return an unauthorized error
if [!token] {
return res.status[401].end[]
}

var payload
try {
// Parse the JWT string and store the result in `payload`.
// Note that we are passing the key in this method as well. This method will throw an error
// if the token is invalid [if it has expired according to the expiry time we set on sign in],
// or if the signature does not match
payload = jwt.verify[token, jwtKey]
} catch [e] {
if [e instanceof jwt.JsonWebTokenError] {
// if the error thrown is because the JWT is unauthorized, return a 401 error
return res.status[401].end[]
}
// otherwise, return a bad request error
return res.status[400].end[]
}

// Finally, return the welcome message to the user, along with their
// username given in the token
res.send[`Welcome ${payload.username}!`]
}

const refresh = [req, res] => {
// [BEGIN] The code uptil this point is the same as the first part of the `welcome` route
const token = req.cookies.token

if [!token] {
return res.status[401].end[]
}

var payload

try {
payload = jwt.verify[token, jwtKey]
} catch [e] {
if [e instanceof jwt.JsonWebTokenError] {
return res.status[401].end[]
}
return res.status[400].end[]
}
// [END] The code uptil this point is the same as the first part of the `welcome` route

// We ensure that a new token is not issued until enough time has elapsed
// In this case, a new token will only be issued if the old token is within
// 30 seconds of expiry. Otherwise, return a bad request status
const nowUnixSeconds = Math.round[Number[new Date[]] / 1000]

if [payload.exp - nowUnixSeconds > 30] {
return res.status[400].end[]
}

// Now, create a new token for the current user, with a renewed expiration time
const newToken = jwt.sign[{ username: payload.username }, jwtKey, {
algorithm: "HS256",
expiresIn: jwtExpirySeconds,
}]

// Set the new token as the users `token` cookie
res.cookie["token", newToken, { maxAge: jwtExpirySeconds * 1000 }]
res.end[]
}

module.exports = {
signIn,
welcome,
refresh,
}

Phương thức "đăng nhập" nhận yêu cầu đăng nhập cơ bản và kiểm tra thông tin đăng nhập được cung cấp. Nếu chúng khớp nhau, nó sẽ tạo mã thông báo JWT mới với tên người dùng và khóa bí mật. Phương pháp này cũng yêu cầu bạn chỉ định thuật toán ký và thời gian hết hạn. Cuối cùng, mã thông báo được ghi lại và lưu trong cookie để khách hàng có thể tìm nạp mã thông báo đó

Phương thức "chào mừng", khi được gọi, sẽ tìm kiếm cookie này và xác nhận rằng mã thông báo hợp lệ bằng cách sử dụng khóa bí mật để giải mã nó. Nếu trường hợp này xảy ra, nó sẽ trả về một thông báo lời chào đơn giản

Cuối cùng, phương thức "làm mới" lấy mã thông báo từ cookie theo cách tương tự. Tuy nhiên, nó thực hiện điều gì đó khác với mã thông báo đã xác thực. Sau khi xác nhận rằng đã đủ thời gian với mã thông báo hiện tại sắp hết hạn, nó sẽ tạo một mã mới và lưu trữ trong cookie để khách hàng tìm nạp

Đủ đơn giản, phải không?

Chạy mã

Bây giờ bạn chỉ cần thêm một vài dòng mã nữa để máy chủ của bạn hoạt động

Sửa đổi "chỉ số. js" như sau

________số 8

Tuyệt quá. Tất cả các thành phần được tại chỗ

Tại đây, bạn đang hiển thị ba điểm cuối—"đăng nhập", "chào mừng" và "làm mới"—trên máy chủ để khách hàng có thể tiếp cận chúng

Bây giờ chỉ cần đi đến thiết bị đầu cuối và chạy mã của bạn bằng lệnh sau

$ node ./index.js

Xuất sắc

Kiểm tra xác thực mã thông báo

Để kiểm tra công việc của mình, bạn sẽ cần một công cụ như Postman để thay mặt bạn gửi yêu cầu đến máy chủ

Đầu tiên, tạo một yêu cầu POST tới URL sau

-H "Authorization: Bearer Rft3dqrs56Blirls56a"
0

Thêm tải trọng sau vào phần thân của yêu cầu của bạn

-H "Authorization: Bearer Rft3dqrs56Blirls56a"
1

Đây là những thông tin đăng nhập để xác thực chính bạn với máy chủ

Gửi yêu cầu và xem cách máy chủ ghi lại mã thông báo mới được tạo. Bạn có thể xác nhận rằng yêu cầu đã thành công bằng cách xem mã trạng thái "200" và cookie được lưu cùng với mã thông báo trong tiêu đề

Để xác nhận rằng mã thông báo hoạt động, hãy gửi yêu cầu NHẬN tới URL bên dưới. Đừng quên sử dụng cùng một cửa sổ và làm sạch cơ thể

$ npm init
0

Bạn sẽ thấy thông báo chào mừng

Xuất sắc

Bây giờ, nếu bạn đợi đủ lâu, mã thông báo cuối cùng sẽ hết hạn và bạn sẽ không còn quyền truy cập vào điểm cuối chào mừng. Để giữ cho mã thông báo và thông tin đăng nhập của bạn hợp lệ, bạn phải gọi điểm cuối cuối cùng bằng POST tới URL sau

$ npm init
1

Bạn đã làm rất tốt

Ví dụ trong bài viết này được lấy cảm hứng từ bài viết này về cách xây dựng một Nút đơn giản. cơ chế xác thực mã thông báo js

Tiến về phía trước

Nếu bạn là nhà phát triển, bạn có trách nhiệm cố gắng hết sức để bảo vệ dữ liệu trong các dự án của mình. Rốt cuộc, bạn có nghĩa vụ đối với người dùng của mình ngoài cam kết của bạn với chủ lao động hoặc khách hàng của mình, đặc biệt là với số lượng lớn hoạt động tội phạm xảy ra trên web và việc mọi người sẵn sàng cung cấp dữ liệu của họ để thuận tiện

Bài đăng này được viết bởi Juan Reyes. Juan là một kỹ sư chuyên nghiệp và là một người mơ mộng, người đã vượt biển để đến Nhật Bản theo lời hứa về cơ hội và thách thức. Trong khi cố gắng tìm kiếm bản thân và xây dựng một cuộc sống có ý nghĩa ở phương đông, Juan mượn sự khôn ngoan từ kinh nghiệm của mình với tư cách là một doanh nhân, nghệ sĩ, người hối hả, người cha, người chồng và người bạn để bắt đầu viết về niềm đam mê, ý nghĩa, sự phát triển bản thân, khả năng lãnh đạo, các mối quan hệ . Nhiều năm đấu tranh và khám phá bản thân đã truyền cảm hứng cho anh ấy và thúc đẩy anh ấy dấn thân vào hành trình tìm kiếm trí tuệ

Mã thông báo mang của tôi là gì?

Mã thông báo mang là loại mã thông báo truy cập chủ yếu được sử dụng với OAuth 2. 0. Mã thông báo mang là một chuỗi không rõ ràng, không nhằm mục đích có bất kỳ ý nghĩa nào đối với khách hàng sử dụng nó . Một số máy chủ sẽ phát hành mã thông báo là một chuỗi ký tự thập lục phân ngắn, trong khi những máy chủ khác có thể sử dụng mã thông báo có cấu trúc, chẳng hạn như Mã thông báo Web JSON.

Mã thông báo truy cập được xác minh như thế nào?

Mã thông báo truy cập . Mã thông báo tự mã hóa toàn bộ ủy quyền và được bảo vệ bằng mật mã để chống giả mạo. JSON Web Token [JWT] đã trở thành tiêu chuẩn thực tế cho các token độc lập. by making a call to the authorisation server's introspection endpoint. The token encodes the entire authorisation in itself and is cryptographically protected against tampering. JSON Web Token [JWT] has become the defacto standard for self-contained tokens.

Chủ Đề