Tôi đã cố gắng để có được đầu của tôi xung quanh này trong một thời bây giờ, và với lời cảm ơn đặc biệt để Lars Kemmann và Tratcher, tôi tin rằng cách chấp nhận làm điều này là như sau:
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(
new CookieAuthenticationOptions { }
);
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = ConfigurationManager.AppSettings["ida:Wtrealm"],
MetadataAddress = ConfigurationManager.AppSettings["ida:FedMetadataURI"]
}
);
Dường phản đối trực quan rằng bạn đang định cấu hình loại xác thực mặc định là 'Xác thực Cookie' để WsFederation hoạt động, tuy nhiên đây thực sự là chuỗi được sử dụng để nhận dạng từng phần trung gian (điều này cho phép bạn đăng ký cùng loại phần mềm trung gian nhiều lần, ví dụ), họ đánh giá như sau:
CookieAuthenticationDefaults.AuthenticationType
= "Cookies"
WsFederationAuthenticationDefaults.AuthenticationType
= "Liên đoàn"
gì đang xảy ra ở đây là chúng ta đang nói OWIN rằng middleware có nhãn "Cookies" nên được sử dụng theo mặc định để xác thực yêu cầu, sau đó chúng tôi thêm phần mềm trung gian CookieAuthentication (theo mặc định, nhãn này được gắn nhãn "Cookies" từ giá trị CookieAuthenticationDefaults.AuthenticationType
, vì vậy chúng tôi không phải viết bất kỳ mã bổ sung nào để thiết lập), cuối cùng chúng tôi thêm phần mềm trung gian FederationAuthentication (được gắn nhãn là WsFederationAuthenticationDefaults.AuthenticationType
- nghĩa là " Liên kết "), sự hiểu biết của tôi là Middleware của Liên đoàn sử dụng phần mềm trung gian Cookie để quản lý các cookie liên quan đến xác thực của nó.
Tất cả những gì còn lại nó để làm được cấu hình ứng dụng của bạn để gọi middleware tại một thời điểm lựa chọn của bạn, điều này có thể đạt được trong một số cách khác nhau, một số trong đó như sau:
- Bằng trở về một phản hồi HTTP 401
- Bằng cách sử dụng các thuộc tính
[Authorize]
trên một MVC Controller
- Bằng cách gọi bối cảnh OWIN
IAuthenticationManager
's Challenge
phương pháp (thông qua trong nhãn của middleware Liên kết của bạn)
Khi tôi hỏi câu hỏi này here, Lars đã trả lời với một ví dụ rất rõ ràng để làm thế nào để yêu cầu xác thực cho tất cả các yêu cầu, tôi sau đó đóng gói nó vào đường ống OWIN như sau:
app.Use(
(context, continuation) =>
{
if (
(context.Authentication.User != null) &&
(context.Authentication.User.Identity != null) &&
(context.Authentication.User.Identity.IsAuthenticated)
)
{
return continuation();
}
else
{
context.Authentication.Challenge(WsFederationAuthenticationDefaults.AuthenticationType);
return Task.Delay(0);
}
}
);
Lưu ý rằng trong ví dụ đầu tiên ở trên, tôi di chuyển Wtrealm và giá trị MetadataAddress vào tập tin cấu hình của tôi để dễ bảo trì, họ cài đặt ứng dụng chỉ đơn giản:
<appSettings>
<add key="ida:Wtrealm" value="[app-uri]" />
<add key="ida:FedMetadataURI" value="https://[adfs-server]/federationmetadata/2007-06/federationmetadata.xml" />
</appSettings>
tôi hi vọng điêu nay co ich.
cần cài đặt gói Microsoft.Owin.Security.Cookies – BozoJoe