Làm cách nào để biết mã thông báo của tôi có hợp lệ hay không?

Tôi đang sử dụng API dàn nhạc để tạo mã thông báo truy cập và tiếp tục sử dụng API đó để xác thực các API khác.
Để duy trì tính ổn định và tính hợp lệ của lệnh gọi, tôi cần kiểm tra xem mã thông báo có hợp lệ hay không trước khi thực hiện lệnh gọi API.
Làm cách nào để kiểm tra xem mã thông báo của tôi có hợp lệ hay không?

Cập nhật mọi thông tin được công bố tại Hội nghị thượng đỉnh Firebase và tìm hiểu cách Firebase có thể giúp bạn đẩy nhanh quá trình phát triển ứng dụng và tự tin chạy ứng dụng của mình. Tìm hiểu thêm

  • căn cứ hỏa lực
  • Tài liệu
  • xác thực
  • Xây dựng

Gửi phản hồi Xác minh mã thông báo ID Sắp xếp ngăn nắp với các bộ sưu tập Lưu và phân loại nội dung dựa trên sở thích của bạn

Nếu ứng dụng khách Firebase của bạn giao tiếp với máy chủ phụ trợ tùy chỉnh, bạn có thể cần xác định người dùng hiện đã đăng nhập trên máy chủ đó. Để làm như vậy một cách an toàn, sau khi đăng nhập thành công, hãy gửi mã thông báo ID của người dùng đến máy chủ của bạn bằng HTTPS. Sau đó, trên máy chủ, xác minh tính toàn vẹn và tính xác thực của mã thông báo ID và truy xuất

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
1 từ đó. Bạn có thể sử dụng
let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
1 được truyền theo cách này để xác định an toàn người dùng hiện đang đăng nhập trên máy chủ của bạn

Ghi chú. Có thể thực hiện nhiều trường hợp sử dụng để xác minh mã thông báo ID trên máy chủ bằng cách sử dụng Quy tắc bảo mật cho Cơ sở dữ liệu thời gian thực Firebase và Lưu trữ đám mây. Xem liệu những giải pháp đó có giải quyết được sự cố của bạn hay không trước khi tự xác minh mã thông báo ID. Cảnh báo. Các phương thức xác minh mã thông báo ID có trong SDK quản trị Firebase nhằm xác minh mã thông báo ID đến từ SDK máy khách, không phải mã thông báo tùy chỉnh mà bạn tạo bằng SDK quản trị. Xem để biết thêm thông tin.

Trước khi bắt đầu

Để xác minh mã thông báo ID bằng SDK quản trị Firebase, bạn phải có tài khoản dịch vụ. Làm theo hướng dẫn thiết lập SDK quản trị để biết thêm thông tin về cách khởi tạo SDK quản trị bằng tài khoản dịch vụ

Truy xuất mã thông báo ID trên máy khách

Khi người dùng hoặc thiết bị đăng nhập thành công, Firebase sẽ tạo mã thông báo ID tương ứng để nhận dạng duy nhất họ và cấp cho họ quyền truy cập vào một số tài nguyên, chẳng hạn như Cơ sở dữ liệu thời gian thực Firebase và Lưu trữ đám mây. Bạn có thể sử dụng lại mã thông báo ID đó để xác định người dùng hoặc thiết bị trên máy chủ phụ trợ tùy chỉnh của mình. Để truy xuất mã thông báo ID từ ứng dụng khách, hãy đảm bảo rằng người dùng đã đăng nhập rồi lấy mã thông báo ID từ người dùng đã đăng nhập

iOS+

Mục tiêu-C
FIRUser *currentUser = [FIRAuth auth].currentUser;
[currentUser getIDTokenForcingRefresh:YES
                           completion:^[NSString *_Nullable idToken,
                                        NSError *_Nullable error] {
          if [error] {
            // Handle error
            return;
          }

          // Send token to your backend via HTTPS
          // ...
}];
Nhanh
let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}

Android

FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];

Đoàn kết

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync[true].ContinueWith[task => {
  if [task.IsCanceled] {
    Debug.LogError["TokenAsync was canceled."];
   return;
  }

  if [task.IsFaulted] {
    Debug.LogError["TokenAsync encountered an error: " + task.Exception];
    return;
  }

  string idToken = task.Result;

  // Send token to your backend via HTTPS
  // ...
}];

C++

firebase::auth::User* user = auth->current_user[];
if [user != nullptr] {
  firebase::Future idToken = user->GetToken[true];

  // Send token to your backend via HTTPS
  // ...
}

mạng

firebase.auth[].currentUser.getIdToken[/* forceRefresh */ true].then[function[idToken] {
  // Send token to your backend via HTTPS
  // ...
}].catch[function[error] {
  // Handle error
}];

Sau khi có mã thông báo ID, bạn có thể gửi JWT đó đến chương trình phụ trợ của mình và xác thực nó bằng SDK quản trị Firebase hoặc sử dụng thư viện JWT của bên thứ ba nếu máy chủ của bạn được viết bằng ngôn ngữ mà Firebase không hỗ trợ nguyên bản

Xác minh mã thông báo ID bằng SDK quản trị Firebase

SDK quản trị Firebase có phương thức tích hợp để xác minh và giải mã mã thông báo ID. Nếu mã thông báo ID được cung cấp có định dạng chính xác, chưa hết hạn và được ký hợp lệ, phương thức sẽ trả về mã thông báo ID đã giải mã. Bạn có thể lấy

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
1 của người dùng hoặc thiết bị từ mã thông báo đã giải mã

Ghi chú. Điều này không kiểm tra xem mã thông báo đã bị thu hồi hay chưa. Nhìn thấy. .

Làm theo hướng dẫn thiết lập SDK quản trị để khởi tạo SDK quản trị bằng tài khoản dịch vụ. Sau đó, sử dụng phương pháp

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
4 để xác minh mã thông báo ID

Nút. js

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
0

Java

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
1

con trăn

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
2

Đi

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
3

C#

let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
0

Xác minh mã thông báo ID yêu cầu ID dự án. SDK quản trị Firebase cố gắng lấy ID dự án thông qua một trong các phương pháp sau

  • Nếu SDK được khởi chạy với tùy chọn ứng dụng
    let currentUser = FIRAuth.auth[]?.currentUser
    currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
      if let error = error {
        // Handle error
        return;
      }
    
      // Send token to your backend via HTTPS
      // ...
    }
    
    5 rõ ràng, thì SDK sẽ sử dụng giá trị của tùy chọn đó
  • Nếu SDK được khởi tạo bằng thông tin đăng nhập tài khoản dịch vụ, SDK sẽ sử dụng trường
    let currentUser = FIRAuth.auth[]?.currentUser
    currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
      if let error = error {
        // Handle error
        return;
      }
    
      // Send token to your backend via HTTPS
      // ...
    }
    
    6 của đối tượng JSON của tài khoản dịch vụ
  • Nếu biến môi trường
    let currentUser = FIRAuth.auth[]?.currentUser
    currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
      if let error = error {
        // Handle error
        return;
      }
    
      // Send token to your backend via HTTPS
      // ...
    }
    
    7 được đặt, SDK sẽ sử dụng giá trị của nó làm ID dự án. Biến môi trường này có sẵn cho mã chạy trên cơ sở hạ tầng của Google như App Engine và Compute Engine

Xác minh mã thông báo ID bằng thư viện JWT của bên thứ ba

Nếu chương trình phụ trợ của bạn ở ngôn ngữ không được SDK quản trị Firebase hỗ trợ, thì bạn vẫn có thể xác minh mã thông báo ID. Trước tiên, hãy tìm thư viện JWT của bên thứ ba cho ngôn ngữ của bạn. Sau đó, xác minh tiêu đề, tải trọng và chữ ký của mã thông báo ID

Xác minh tiêu đề của mã thông báo ID phù hợp với các ràng buộc sau

Yêu cầu tiêu đề mã thông báo ID_______08Thuật toán
let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
9
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
0Key IDPhải tương ứng với một trong các khóa công khai được liệt kê tại
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
1

Xác minh tải trọng của mã thông báo ID tuân theo các ràng buộc sau

Yêu cầu tải trọng mã thông báo ID
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
2Thời gian hết hạnPhải trong tương lai. Thời gian được tính bằng giây kể từ kỷ nguyên UNIX.
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
3Được phát hành vào thời điểmPhải trong quá khứ. Thời gian được tính bằng giây kể từ kỷ nguyên UNIX.
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
4Đối tượng Phải là ID dự án Firebase của bạn, mã định danh duy nhất cho dự án Firebase của bạn, có thể tìm thấy ID này trong URL của bảng điều khiển của dự án đó.
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
5Nhà phát hành phải là
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
6, trong đó
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
7 là cùng một ID dự án được sử dụng cho
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
4 ở trên.
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
9SubjectPhải là một chuỗi không trống và phải là
let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
1 của người dùng hoặc thiết bị. ________ 51 Thời gian xác thực Phải trong quá khứ. Thời điểm người dùng xác thực

Cuối cùng, hãy đảm bảo rằng mã thông báo ID đã được ký bởi khóa cá nhân tương ứng với xác nhận quyền sở hữu

FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
0 của mã thông báo. Lấy khóa công khai từ
FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
1 và sử dụng thư viện JWT để xác minh chữ ký. Sử dụng giá trị của
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync[true].ContinueWith[task => {
  if [task.IsCanceled] {
    Debug.LogError["TokenAsync was canceled."];
   return;
  }

  if [task.IsFaulted] {
    Debug.LogError["TokenAsync encountered an error: " + task.Exception];
    return;
  }

  string idToken = task.Result;

  // Send token to your backend via HTTPS
  // ...
}];
4 trong tiêu đề
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync[true].ContinueWith[task => {
  if [task.IsCanceled] {
    Debug.LogError["TokenAsync was canceled."];
   return;
  }

  if [task.IsFaulted] {
    Debug.LogError["TokenAsync encountered an error: " + task.Exception];
    return;
  }

  string idToken = task.Result;

  // Send token to your backend via HTTPS
  // ...
}];
5 của phản hồi từ điểm cuối đó để biết khi nào cần làm mới khóa chung

Nếu tất cả các xác minh trên đều thành công, bạn có thể sử dụng chủ đề [

FirebaseUser mUser = FirebaseAuth.getInstance[].getCurrentUser[];
mUser.getIdToken[true]
    .addOnCompleteListener[new OnCompleteListener[] {
        public void onComplete[@NonNull Task task] {
            if [task.isSuccessful[]] {
                String idToken = task.getResult[].getToken[];
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException[];
            }
        }
    }];
9] của mã thông báo ID làm
let currentUser = FIRAuth.auth[]?.currentUser
currentUser?.getIDTokenForcingRefresh[true] { idToken, error in
  if let error = error {
    // Handle error
    return;
  }

  // Send token to your backend via HTTPS
  // ...
}
1 của người dùng hoặc thiết bị tương ứng

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.

Mã thông báo có hết hạn không?

Mã thông báo của bạn có thể hết hạn và cũng có thể bị thu hồi bởi bạn, các ứng dụng bạn đã ủy quyền và chính GitHub. Khi mã thông báo đã hết hạn hoặc đã bị thu hồi, mã đó không thể được sử dụng để xác thực các yêu cầu Git và API nữa.

Ai đó có thể đánh cắp mã thông báo của bạn không?

Đây là một kỹ thuật mới mà tin tặc đã được báo cáo là sử dụng để di chuyển ngang sau khi chúng xâm nhập vào mạng . Nó có hiệu quả cao và đã được sử dụng trong hầu hết các cuộc tấn công nổi tiếng đã được báo cáo kể từ năm 2014.

Mã thông báo xác thực là gì?

Mã thông báo xác thực là một cách an toàn, dễ sử dụng để xác thực rằng bạn là người dùng được ủy quyền trên tài khoản khi bạn liên hệ với một trong các nhóm hỗ trợ của chúng tôi để được trợ giúp. This article explains everything you need to know about the validation token.

Chủ Đề