2014-07-22 18 views
13

Tôi đang sử dụng Owin và Identity và tôi đang gặp sự cố với Xác nhận quyền sở hữu.Sử dụng các loại xác nhận quyền sở hữu hợp lệ trong Owin Identity và Asp.Net MVC

Tôi có các ứng dụng mà người dùng sử dụng email để xác thực và những người khác sử dụng tên người dùng.

  1. Phương thức đăng nhập trong lớp doanh nghiệp có thể chấp nhận Email hoặc Tên người dùng tùy thuộc vào từng trường hợp.

  2. Để "làm xáo trộn" danh tính người dùng, tôi sử dụng GUID, duy nhất cho mỗi người dùng khi hiển thị trang có thông tin người dùng.

    tôi cũng sử dụng này bởi vì đôi khi một email hoặc tên người dùng có thể là một vấn đề trong url ...

Khi tôi ký vào một người sử dụng tôi có những tuyên bố sau đây loại:

new Claim(ClaimTypes.Email, user.Email), 
new Claim(ClaimTypes.Name, user.FullName), 
new Claim(ClaimTypes.GivenName, user.FirstName), 
new Claim(ClaimTypes.Surname, user.LastName), 
new Claim(ClaimTypes.NameIdentifier, user.UserUniqueIdentifier.ToString()) 

Vì vậy, cách giải thích của tôi là:

Email is the user's email 

Name is the user's full name 

GivenName is the user's first name 

Surname is the user's last name 

NameIdentifier is the user's unique identifier ... It can be the email, the username or in this case I am using an Unique ID. 

Điều kỳ lạ là không có Loại xác nhận quyền sở hữu. Nơi sẽ đặt nó?

Về cơ bản có vẻ như có sự cố khi Tên người dùng không được sử dụng làm số nhận dạng tên duy nhất nhưng vẫn cần thiết.

Có vấn đề gì với các loại xác nhận quyền sở hữu logic của tôi?

Trả lời

19

ClaimTypes.Name (http: // schemas.xmlsoap.org/ws/2005/05/identity/claims/name) nên được sử dụng cho tên người dùng.

ClaimTypes.NameIdentifier thường được sử dụng cho id của người dùng. Trong một số trường hợp, nó có thể là tên người dùng.

ASP.NET Identity sử dụng ClaimTypes.Name để lưu tên người dùng và ClaimTypes.NameIdentifier để lưu GUID khóa chính của người dùng.

+0

Và bạn sẽ lưu trữ tên thật của người dùng ở đâu? Ý tôi là, hãy tưởng tượng người dùng có tên là "John Brock Smith" –

+4

Bạn có thể tạo các xác nhận quyền sở hữu của riêng mình. Chúng chỉ là dây. Tạo một chuỗi ký tự gọi là FullName. Xác nhận quyền sở hữu mới (Họ tên, "John Brock Smith"), – cecilphillip

7

Nếu bạn kiểm tra những gì Facebook hoặc Google trở về từ oAuth, bạn sẽ thấy rằng ClaimTypes.NameClaimTypes.GivenName + ClaimTypes.Surname. LinkedIn trở lại sau đó nối và tôi tin rằng đây là một lỗi vì tôi có một tên người dùng hoàn toàn khác nhau ở đó. Twitter trả về tên người dùng cho ClaimTypes.Name, nhưng Twitter là một trường hợp đặc biệt và thậm chí họ không trả lại email.

Tất cả trong số họ đang sử dụng một số số vô nghĩa cho số ClaimTypes.NameIdentifier. Và họ sử dụng tên chuỗi của riêng họ, thường bắt đầu bằng urn:facebook:link, urn:google:profile, v.v ... cho dữ liệu tùy chỉnh.

Asp.NET Mô hình nhận dạng sử dụng UserName cho ClaimTypes.Name. Điểm mấu chốt là ClaimTypes.Name được sử dụng khác nhau trong thực tế. Bạn có thể thêm bất kỳ tên xác nhận quyền sở hữu nào làm chuỗi và có thể thêm lược đồ urn:... để làm cho nó rõ ràng.

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