Sử dụng luồng cấp ẩn OAuth 2.0 trong cổng thông tin của bạn

Lưu ý

Từ ngày 12 tháng 10 năm 2022, cổng thông tin Power Apps sẽ trở thành Power Pages. Thông tin khác: Microsoft Power Pages hiện đã được phát hành rộng rãi (blog)
Chúng tôi sẽ sớm di chuyển và hợp nhất hướng dẫn sử dụng cổng thông tin Power Apps với hướng dẫn sử dụng Power Pages.

Tính năng này cho phép khách hàng thực hiện cuộc gọi phía máy khách đến các API bên ngoài và bảo mật cuộc gọi bằng dòng cấp ẩn OAuth. Tính năng này cung cấp một điểm cuối để lấy mã thông báo truy cập bảo mật. Những mã thông báo sẽ chứa thông tin danh tính người dùng mà API bên ngoài sẽ sử dụng để ủy quyền theo dòng cấp ẩn OAuth 2.0. Thông tin danh tính của người dùng đã đăng nhập được chuyển một cách bảo mật tới các lệnh gọi AJAX bên ngoài, giúp các nhà phát triển chuyển ngữ cảnh xác thực và cũng sẽ giúp người dùng bảo mật các API của họ.

Dòng cấp ẩn OAuth 2.0 hỗ trợ điểm cuối mã thông báo mà máy khách có thể gọi để nhận mã thông báo ID.

Chứng chỉ tùy chỉnh

Việc sử dụng chứng chỉ mặc định cho dòng cấp ẩn OAuth 2.0 đã được ngừng hỗ trợ. Bạn sẽ cần sử dụng chứng chỉ tùy chỉnh trong khi sử dụng điểm cuối OAuth 2.0. Sử dụng trung tâm quản trị Power Platform để tải lên chứng chỉ tùy chỉnh. Sau khi tải lên chứng chỉ tùy chỉnh, bạn cần cập nhật cài đặt trang web như bên dưới:

  1. Đi tới  thiết đặt cổng thông tin và chọn  Thiết đặt trang web.

  2. Để tạo một thiết đặt mới, hãy chọn  Mới.

  3. Để chỉnh sửa một thiết đặt hiện có, hãy chọn thiết đặt trang được liệt kê trong lưới.

  4. Chỉ định các giá trị:

    • Tên: CustomCertificates/ImplicitGrantflow
    • Trang web: Trang web được liên kết
    • Giá trị: Sao chép vân tay của chứng chỉ tùy chỉnh đã tải lên từ màn hình Quản lý chứng chỉ tùy chỉnh và dán vào đây. Giá trị sẽ cho biết chứng chỉ nào sẽ được sử dụng cho dòng cấp ngầm.
  5. Chọn  Lưu & Đóng. Menu chung cho Thiết đặt trang web mới với các giá trị được chỉ định.

Thông tin chi tiết về điểm cuối mã thông báo

Bạn cũng có thể nhận được một mã thông báo bằng cách đăng yêu cầu đến điểm cuối /token. URL cho điểm cuối mã thông báo là: <portal_url>/_services/auth/token. Điểm cuối mã thông báo hỗ trợ các thông số sau:

Tham số Bắt buộc? Mô tả
client_id Không Một chuỗi được thông qua khi thực hiện cuộc gọi đến điểm cuối ủy quyền. Bạn phải đảm bảo rằng ID máy khách đã được đăng ký với cổng thông tin. Nếu không, lỗi sẽ hiển thị. ID máy khách được thêm trong yêu cầu trong mã thông báo dưới dạng tham số audappid và máy khách có thể sử dụng để xác thực rằng mã thông báo được trả về là dành cho ứng dụng của họ.
Độ dài tối đa là 36 ký tự. Chỉ hỗ trợ ký tự chữ và số, dấu gạch ngang.
redirect_uri Không URL của cổng thông tin nơi có thể gửi và nhận phản hồi xác thực. Nó phải được đăng ký cho client_id cụ thể dùng trong cuộc gọi và phải phải có giá trị đúng như đã đăng ký.
trạng thái Không Một giá trị có trong yêu cầu cũng được trả về trong phản hồi mã thông báo. Đó có thể là một chuỗi nội dung bất kỳ mà bạn muốn sử dụng. Thông thường, một giá trị duy nhất được tạo ngẫu nhiên sẽ được sử dụng để ngăn chặn các cuộc tấn công giả mạo yêu cầu giữa các trang web.
Độ dài tối đa là 20 ký tự.
số ngẫu nhiên Không Một giá trị chuỗi do máy khách gửi, được bao gồm dưới dạng yêu cầu trong mã thông báo ID được tạo ra. Sau đó, máy khách có thể xác minh giá trị này để giảm bớt các cuộc tấn công tái tạo mã thông báo. Độ dài tối đa là 20 ký tự.
response_type No Tham số này chỉ hỗ trợ token dưới dạng một giá trị, cho phép ứng dụng của bạn ngay lập tức nhận được một mã thông báo truy cập từ điểm cuối ủy quyền mà không phải gửi yêu cầu thứ hai cho điểm cuối ủy quyền.

Lưu ý

Mặc dù các thông số client_id, redirect_uri, state, và nonce là tùy chọn nhưng vẫn nên sử dụng chúng để đảm bảo tính bảo mật cho tích hợp của bạn.

Phản hồi thành công

Điểm cuối mã thông báo trả về trạng thái và expires_in dưới dạng tiêu đề phản hồi và mã thông báo trong phần nội dung biểu mẫu.

Phản hồi lỗi

Lỗi ở điểm cuối mã thông báo được trả về dưới dạng tài liệu JSON với các giá trị sau:

  • ID lỗi: Mã định danh duy nhất của lỗi.
  • Thông báo lỗi: Một thông báo lỗi cụ thể có thể giúp bạn xác định nguyên nhân gốc rễ của lỗi xác thực.
  • ID tương quan: Một GUID dùng cho mục đích gỡ lỗi. Nếu bạn đã bật ghi nhật ký chẩn đoán, ID tương quan sẽ xuất hiện trong nhật ký lỗi máy chủ.
  • Dấu thời gian: Ngày và giờ xảy ra lỗi.

Thông báo lỗi được hiển thị bằng ngôn ngữ mặc định của người dùng đã đăng nhập. Nếu người dùng chưa đăng nhập, trang đăng nhập được hiển thị để người dùng đăng nhập. Chẳng hạn, một phản hồi lỗi có hình thức như sau:

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Thông tin chi tiết về điểm cuối ủy quyền

Lưu ý

Điểm cuối ủy quyền không được hỗ trợ nữa. Sử dụng yêu cầu ĐĂNG của điểm cuối Mã thông báo để nhận mã thông báo ID.]

URL cho điểm cuối ủy quyền là: <portal_url>/_services/auth/authorize. Điểm cuối ủy quyền hỗ trợ các thông số sau:

Tham số Bắt buộc? Mô tả
client_id Một chuỗi được thông qua khi thực hiện cuộc gọi đến điểm cuối ủy quyền. Bạn phải đảm bảo rằng ID máy khách đã được đăng ký với cổng thông tin. Nếu không, lỗi sẽ hiển thị. ID máy khách được thêm trong yêu cầu trong mã thông báo dưới dạng tham số audappid và máy khách có thể sử dụng để xác thực rằng mã thông báo được trả về là dành cho ứng dụng của họ.
Độ dài tối đa là 36 ký tự. Chỉ hỗ trợ ký tự chữ và số, dấu gạch ngang.
redirect_uri URL của cổng thông tin nơi có thể gửi và nhận phản hồi xác thực. Nó phải được đăng ký cho client_id cụ thể dùng trong cuộc gọi và phải phải có giá trị đúng như đã đăng ký.
trạng thái Không Một giá trị có trong yêu cầu cũng được trả về trong phản hồi mã thông báo. Đó có thể là một chuỗi nội dung bất kỳ mà bạn muốn sử dụng. Thông thường, một giá trị duy nhất được tạo ngẫu nhiên sẽ được sử dụng để ngăn chặn các cuộc tấn công giả mạo yêu cầu giữa các trang web.
Độ dài tối đa là 20 ký tự.
số ngẫu nhiên Không Một giá trị chuỗi do máy khách gửi, được bao gồm dưới dạng yêu cầu trong mã thông báo ID được tạo ra. Sau đó, máy khách có thể xác minh giá trị này để giảm bớt các cuộc tấn công tái tạo mã thông báo. Độ dài tối đa là 20 ký tự.
response_type No Tham số này chỉ hỗ trợ token dưới dạng một giá trị, việc này cho phép ứng dụng của bạn ngay lập tức nhận được một mã thông báo truy cập từ điểm cuối ủy quyền mà không phải gửi yêu cầu thứ hai cho điểm cuối ủy quyền.

Phản hồi thành công

Điểm cuối ủy quyền trả về các giá trị sau trong URL phản hồi dưới dạng một phân đoạn:

  • mã thông báo: Mã thông báo được trả về dưới dạng Mã thông báo web JSON (JWT) được ký số bằng khóa riêng tư của cổng thông tin.
  • trạng thái: Nếu một thông số trạng thái được bao gồm trong yêu cầu, giá trị đó cần xuất hiện trong phản hồi. Ứng dụng cần xác minh rằng các giá trị trạng thái trong yêu cầu và phản hồi giống nhau.
  • expires_in: Độ dài khoảng thời gian mã thông báo truy cập hợp lệ (tính bằng giây).

Chẳng hạn, một phản hồi thành công có hình thức như sau:

GET https://aadb2cplayground.azurewebsites.net/#token=eyJ0eXAiOiJKV1QiLCJhbGciOI1NisIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q&expires_in=3599&state=arbitrary_data_you_sent_earlier

Phản hồi lỗi

Lỗi ở điểm cuối ủy quyền được trả về dưới dạng tài liệu JSON với các giá trị sau:

  • ID lỗi: Mã định danh duy nhất của lỗi.
  • Thông báo lỗi: Một thông báo lỗi cụ thể có thể giúp bạn xác định nguyên nhân gốc rễ của lỗi xác thực.
  • ID tương quan: Một GUID dùng cho mục đích gỡ lỗi. Nếu bạn đã bật ghi nhật ký chẩn đoán, ID tương quan sẽ xuất hiện trong nhật ký lỗi máy chủ.
  • Dấu thời gian: Ngày và giờ xảy ra lỗi.

Thông báo lỗi được hiển thị bằng ngôn ngữ mặc định của người dùng đã đăng nhập. Nếu người dùng chưa đăng nhập, trang đăng nhập được hiển thị để người dùng đăng nhập. Chẳng hạn, một phản hồi lỗi có hình thức như sau:

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Xác thực mã thông báo ID

Việc chỉ nhận mã thông báo ID là không đủ để xác thực người dùng; bạn còn phải xác thực chữ ký của mã thông báo và xác minh yêu cầu trong mã thông báo dựa trên các yêu cầu của ứng dụng. Điểm cuối mã thông báo công khai cung cấp khóa công khai của cổng thông tin, khóa này có thể dùng để xác thực chữ ký của mã thông báo do cổng thông tin cung cấp. URL cho điểm cuối mã thông báo công khai là: <portal_url>/_services/auth/publickey.

Bật hoặc tắt luồng cấp ẩn

Theo mặc định, luồng cấp ẩn được bật. Nếu bạn muốn tắt luồng cấp ẩn, hãy đặt giá trị của thiết đặt trang web Bộ kết nối/ImplicitGrantFlowEnabled thành Sai.

Nếu thiết đặt trang web này không có sẵn trong cổng thông tin, bạn phải tạo một thiết đặt trang web mới với giá trị thích hợp.

Đặt cấu hình tính hợp lệ của mã thông báo

Theo mặc định, mã thông báo hợp lệ trong 15 phút. Nếu bạn muốn thay đổi hiệu lực của mã thông báo, đặt giá trị của thiết đặt trang web ImplicitGrantFlow/TokenExpirationTime thành giá trị bắt buộc. Giá trị phải được chỉ định sau vài giây. Giá trị tối đa có thể là 1 giờ và giá trị tối thiểu phải là 1 phút. Nếu chỉ định giá trị không chính xác (ví dụ: ký tự chữ và số) thì giá trị mặc định cho 15 phút sẽ được sử dụng. Nếu bạn chỉ định một giá trị lớn hơn giá trị tối đa hoặc nhỏ hơn giá trị tối thiểu, giá trị tối đa và tối thiểu sẽ được sử dụng tương ứng theo mặc định.

Ví dụ, để đặt tính hợp lệ của mã thông báo thành 30 phút, hãy đặt giá trị của thiết đặt trang web ImplicitGrantFlow/TokenExpirationTime thành 1800. Ví dụ, để đặt tính hợp lệ của mã thông báo thành 1 giờ, hãy đặt giá trị của thiết đặt trang web ImplicitGrantFlow/TokenExpirationTime thành 3600.

Đăng ký ID máy khách cho luồng cấp ẩn

Bạn phải đăng ký ID máy khách với các cổng thông tin mà luồng này được cho phép. Để đăng ký một ID máy khách, bạn phải tạo thiết lập trang web sau đây:

Thiết đặt site Value
ImplicitGrantFlow/RegisteredClientId ID máy khách hợp lệ được cho phép cho cổng thông tin này. Các giá trị phải được phân tách bằng dấu chấm phẩy và có thể chứa các ký tự chữ số và dấu gạch ngang. Độ dài tối đa là 36 ký tự.
ImplicitGrantFlow/{ClientId}/RedirectUri URI chuyển hướng hợp lệ được cho phép cho ID máy khách cụ thể. Các giá trị phải được phân tách bằng dấu chấm phẩy. URL được cung cấp phải có một trang web hợp lệ của cổng thông tin.

Mã mẫu

Bạn có thể sử dụng mã mẫu sau để bắt đầu sử dụng Cấp quyền ẩn OAuth 2.0 với API cổng thông tin Power Apps.

Sử dụng mã thông báo Oauth cho Cổng thông tin với API Web bên ngoài

Mẫu này là một dự án dựa trên ASP.NET và được dùng để xác thực mã thông báo ID do cổng thông tin Power Apps cấp. Bạn có thể tìm thấy mẫu hoàn chỉnh tại đây: Sử dụng mã thông báo Oauth cho Cổng thông tin với API Web bên ngoài.

Mẫu Điểm cuối mã thông báo

Mẫu này cho thấy cách bạn có thể sử dụng chức năng getAuthenticationToken để tìm nạp mã thông báo ID bằng cách sử dụng Điểm cuối mã thông báo trong cổng thông tin Power Apps. Bạn có thể tìm thấy mẫu tại đây: Mẫu Điểm cuối mã thông báo.

Lưu ý

Bạn có thể cho chúng tôi biết bạn thích dùng ngôn ngữ nào cho tài liệu không? Làm một cuộc khảo sát ngắn. (xin lưu ý, khảo sát này bằng tiếng Anh)

Cuộc khảo sát sẽ mất khoảng bảy phút. Không có dữ liệu cá nhân nào được thu thập (điều khoản về quyền riêng tư).