具有应用程序内授权的 OWIN WsFederation 身份验证

OWIN WsFederation authentication with in-app authorization

场景:

我的问题:

这是我的 Startup.Configuration 方法中的代码:

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
    new WsFederationAuthenticationOptions
    {
        MetadataAddress = "https://.../FederationMetadata.xml",
        Wtrealm = "...",                        
    }
);

你有两种选择来实现你想要的:

1. 一种是在 AD FS 上配置它。我个人认为这是执行此操作的正确方法,因为 AD FS 是 IdP,它应该控制其用户是否有权访问应用程序。在这种情况下,公司应该或不应该允许某人使用其部分资源(当然也有反对意见)。这可以通过 AD FS 管理 GUI 在域控制器上轻松完成。以下答案很好地描述了这一点: https://serverfault.com/a/676930/321380

2. 其次是以这种方式在 OWIN WSFed 中间件中使用 Notifications 对象:

            Notifications = new WsFederationAuthenticationNotifications()
            {
                SecurityTokenValidated = (context) =>
                {
                    //extract claims' values and check identity data against your own authorization logic
                    bool isAuthorized = CheckForUnauthorizedAccess();
                    if (!isAuthorized)
                    {
                        throw new SecurityTokenValidationException("Unauthorized access attemp by {some_identifier}");
                    }
                    return Task.FromResult(0);
                },
                AuthenticationFailed = (context) =>
                {
                    if (context.Exception is an unauthorized exception)
                    {
                        context.OwinContext.Response.Redirect("<unauthorized_redirect_url>");
                    }
                    context.HandleResponse(); // Suppress the exception
                    //exception logging goes here
                    return Task.FromResult(0);
                }
            }