2014-05-21 21 views
6

Với WIF (Windows Identity Foundation) 4.5, Microsoft đã tạo ra lớp WindowsPrincipal, là một loại ClaimsPrincipal. Tất nhiên, các lớp này không phải là di động, nhưng các giao diện phía sau chúng là (IPrincipal). Điều tương tự có thể nói về lớp ClaimsIndentity triển khai giao diện IIdentity.Làm thế nào để bạn sử dụng IPrincipal và IIdentity trong các thư viện lớp di động?

Vấn đề tôi có là các lớp này và WIF nói chung hoàn toàn dựa trên khái niệm "xác nhận quyền sở hữu", điều này thật tuyệt vời ... nhưng hai giao diện, IPrincipalIIdentity thì không. Không chỉ vậy, nhưng lớp ClaimsPrincipal cũng có một bộ sưu tập Danh tính thay vì chỉ một danh tính duy nhất được liên kết với nó.

  • IPrincipal có IdentityIsInRole thành viên.
  • IIdentity có AuthenticationType, IsAuthenticatedName thành viên.

Với thực tế là Thư viện lớp học di động chỉ có thể truy cập hai giao diện này, làm cách nào để nhận được khiếu nại thực tế?

Ngoài ra, trong trường hợp hiếm hoi mà hiệu trưởng có nhiều danh tính, làm thế nào để nhận được danh tính "không chính"?

+0

Như các bạn đã biết, mỗi ClaimsPrincipal có nhiều bản sắc và mỗi bản sắc có bộ sưu tập khiếu nại để bạn có thể truy cập bất kỳ danh tính nào bằng cách tham gia biến tham chiếu của ClaimsPrincipal. Giống như ClaimsPrincipal.Identities [1] cho danh tính thứ hai không chính –

Trả lời

4

Microsoft cung cấp tuyên bố loại ý thức trong Microsoft.IdentityModel.dll mà không phải là cầm tay (chưa, tôi hy vọng). Các loại đó chỉ mở rộng các loại nhận dạng hiện tại, ví dụ: IPrincipal:

public interface IClaimsPrincipal : IPrincipal 

Nó có nghĩa là tuyên bố loại biết là compatibile với mã cũ trong đó sử dụng IPrincipalIIdentity giao diện. Nhưng để làm cho mã của bạn bị khiếu nại nhận biết, bạn phải thêm tham chiếu đến Microsoft.IdentityModel.dll (không có sẵn dưới dạng PCL) hoặc viết từ đầu.

Nếu bạn muốn kiểm tra bao nhiêu tuổi mã ứng xử khi xử lý các trường hợp khiếu nại các loại ý thức, bạn chỉ có thể sử dụng downcasting để giao diện IPrincipal:

IClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(new List<IClaimsIdentity>() 
{ 
    new ClaimsIdentity("AuthType1"), 
    new ClaimsIdentity("AuthType2") 
}); 

IPrincipal principal = claimsPrincipal as IPrincipal; 
IIdentity identity = principal.Identity; 
Các vấn đề liên quan