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?