2014-09-14 27 views
5

Tôi đã tạo một ứng dụng nhiều người thuê sử dụng Entity Framework, WebAPI, ASP.NET Identity. Về cơ bản nó đọc tên miền phụ của đối tượng thuê và sử dụng nó để đọc chuỗi kết nối từ cơ sở dữ liệu và đặt nó vào thời gian chạy.ASP.NET Identity + Token Bearer + Multi-Tenant

Mọi thứ đều tuyệt vời, cơ sở dữ liệu đang tạo v.v ... nhưng vấn đề duy nhất hiện nay là Mã nhận dạng người gửi ASP.NET.

Khi tôi đã tạo mã thông báo truy cập cho http://tenant1.#####.com/token, có vẻ như mã thông báo được ký trên cùng một ứng dụng (không có khóa máy nào được chỉ định) và nó cũng cho phép truy cập vào các bộ điều khiển http://tenant2.#####.com. trong trường hợp đó là các tên miền phụ/người thuê khác nhau.

Có cách nào khác không? Hoặc có lẽ tôi nên nhìn vào khung bảo mật khác chứ không phải ASP.NET Identity?

+0

Bạn cần kiểm soát mã thông báo và thêm dữ liệu tùy chỉnh ở đó, tên đối tượng thuê. Kể từ khi thẻ được dựa trên tuyên bố này nên có thể. Sau đó, có một kiểm tra khác theo từng yêu cầu để xác minh xem đối tượng thuê hiện tại có khớp với một từ mã thông báo không. Kiểm tra này có thể được thực hiện trong một mô-đun http tùy chỉnh chẳng hạn. –

+0

Xin chào, trong trường hợp này, việc sử dụng xác nhận quyền sở hữu có phải là phương pháp "an toàn" không? Bởi vì tất cả phải mất là để có thể giả mạo một mã thông báo với các yêu cầu chính xác của người thuê và yêu cầu có thể đi qua? –

+0

Bạn không thể giả mạo mã thông báo ở phía máy khách. –

Trả lời

3

MVC5 giúp bạn dễ dàng thêm xác nhận quyền sở hữu tên người thuê vào nhận dạng người dùng. Trong thư mục Models, sửa lại lớp ApplicationUser trong IdentityModels.cs:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
{ 
    // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 

    // Add claim for tenant name 
    userIdentity.AddClaim(new Claim("tenantName", "abcCompany"); 

    // Add custom user claims here 
    return userIdentity; 
} 

Sau đó, khi một yêu cầu chứng thực được xử lý, xác nhận rằng người dùng có tuyên bố và giá trị chính xác.

+0

Có thể lấy ví dụ về cách lấy tên người thuê tại điểm mà bạn đang thêm nó làm xác nhận quyền sở hữu không? Hiện đang xem xét điều này nhưng cũng cố gắng tránh ghi đè mọi thứ trong SignInManager. –

+0

Tôi đang làm một cái gì đó tương tự như cách người sử dụng –

+0

Nó phụ thuộc vào việc thực hiện của bạn. Tên người thuê nhà có thể dựa trên tên miền phụ của yêu cầu, giá trị cookie hoặc có thể được người dùng cung cấp một cách rõ ràng. Khi truy cập vào giá trị, tôi đang sử dụng cùng một mẫu ASP.NET sử dụng để thực hiện IPrincipal và IIdentity. Bên trong, IPrincipal có tham chiếu theo yêu cầu cho người dùng hiện tại. –

Các vấn đề liên quan