Máy chủ ủy quyền được chia sẻ OAuth cho nhiều ứng dụng


8

Tại cửa hàng của tôi, chúng tôi có một vài API Web .NET sử dụng mã thông báo OAuth để xác thực. Hiện tại, mỗi API web đều là ủy quyền và máy chủ tài nguyên. Người dùng xác thực tất cả các API này bằng cùng một thông tin xác thực, nhưng hiện tại họ cần xác thực độc lập với từng API.

Tôi quan tâm đến việc tạo một máy chủ ủy quyền được chia sẻ (a la http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin- Authorization-server / ), nhưng tôi đang bị treo lên về chuyển đổi yêu cầu. Chúng tôi rất hữu ích khi có thể thêm khiếu nại tùy chỉnh (cụ thể cho ứng dụng) vào mã thông báo được phát hành, dọc theo các dòng của ví dụ sau:

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{

    /* validate credentials here... */

    var identity = new ClaimsIdentity("JWT");

    identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
    identity.AddClaim(new Claim("sub", context.UserName));
    identity.AddClaim(new Claim(ClaimTypes.Role, "Manager"));
    identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor"));

    var props = new AuthenticationProperties(new Dictionary<string, string>
        {
            {
                 "audience", (context.ClientId == null) ? string.Empty : context.ClientId
            }
        });

    var ticket = new AuthenticationTicket(identity, props);
    context.Validated(ticket);
    return Task.FromResult<object>(null);
}

Từ những gì tôi có thể thấy, nếu tôi tạo một máy chủ Ủy quyền chung, tất cả các chuyển đổi khiếu nại cần phải xảy ra ở đó. Điều này có nghĩa là các máy chủ tài nguyên (API Web khác nhau của chúng tôi) không thể thêm bất kỳ khiếu nại tùy chỉnh nào vào mã thông báo của người dùng? Tôi có thể thêm khiếu nại cụ thể cho ứng dụng yêu cầu mã thông báo trên máy chủ Ủy quyền không - hoặc tôi có cần phải xử lý một cái gì đó để máy chủ ủy quyền thêm các khiếu nại nhất định dựa trên ứng dụng yêu cầu không?


Đối với bất kỳ người xem tương lai nào của câu hỏi này, tôi không bao giờ tìm thấy giải pháp cho tài nguyên tiêu thụ để thêm khiếu nại tùy chỉnh. Cuối cùng tôi đã viết một máy chủ ủy quyền sẽ chấp nhận một cấu hình chung cho mỗi máy chủ tài nguyên và tạo các khiếu nại tùy chỉnh dựa trên đó.
Joshua Barron

Có vẻ như bạn sẽ cần quản lý các khiếu nại của mình trong cơ sở dữ liệu trung tâm và sau đó được điền khi mã thông báo được phát hành. OAuth tự nó thực sự chỉ là xác thực / phát hành mã thông báo. Ủy quyền vẫn là một phần bạn phải cắm (yêu cầu, vai trò, v.v.) và quản lý riêng.
Kasey speakman

Câu trả lời:


1

Trước đây, tôi đã có một máy chủ xác thực phát hành mã thông báo. Sau đó, khách hàng đã gửi mã thông báo xác thực đến một máy chủ ủy quyền với yêu cầu có dạng:

"Ứng dụng khách có application_id này đang yêu cầu quyền truy cập cho người dùng được xác định trong mã xác thực đính kèm để truy cập nội dung X."

Máy chủ ủy quyền đã kiểm tra để đảm bảo người dùng được ủy quyền và cấp mã thông báo ủy quyền mới cho khách hàng. Sau đó, khách hàng đã chuyển mã thông báo này cho dịch vụ cung cấp nội dung X.

Máy chủ ủy quyền trong trường hợp này đã cần cập nhật cấu hình để biết về nội dung mới Y.

Bạn có thể sửa đổi nó để các máy chủ tài nguyên yêu cầu máy chủ ủy quyền tạo mã thông báo có chứa các khiếu nại tùy chỉnh đính kèm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.