Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制Windows挑战_C#_Asp.net_.net_Asp.net Mvc_Identity - Fatal编程技术网

C# 强制Windows挑战

C# 强制Windows挑战,c#,asp.net,.net,asp.net-mvc,identity,C#,Asp.net,.net,Asp.net Mvc,Identity,我有一个需要同时使用匿名和Windows的授权提供程序,但我似乎无法使用以下方式获得Windows挑战: if (principal == null || principal.Identity == null || string.IsNullOrWhiteSpace(principal.Identity.Name)) { context.OwinContext.Authentication.Challenge();

我有一个需要同时使用匿名和Windows的授权提供程序,但我似乎无法使用以下方式获得Windows挑战:

if (principal == null || principal.Identity == null || string.IsNullOrWhiteSpace(principal.Identity.Name))
            {
                context.OwinContext.Authentication.Challenge();
                return Task.FromResult(0);
            }
是否需要设置任何其他配置值才能使该行正常工作<代码>上下文.OwinContext.Authentication.Challenge()


你有没有想过为什么这行不通?我需要能够获得windows主体,它只在启用windows的情况下运行良好,但还需要启用匿名,以便能够访问提供程序中的其他端点

简而言之,您应该在Web主机中启用Windows身份验证。 根据您使用的Web主机,有不同的设置

配置Web主机后,控制器代码开始工作

OWIN自主机

HttpListener
配置为在OWIN
Startup
类中接受两种身份验证模式:

class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var listener = (HttpListener)app.Properties["System.Net.HttpListener"];

        listener.AuthenticationSchemes = 
            AuthenticationSchemes.IntegratedWindowsAuthentication |
            AuthenticationSchemes.Anonymous;

        // Other initialization
    }
}
IIS

如果您在IIS上托管应用程序,则应在IIS网站设置中为您的应用程序启用Windows身份验证模式:

如果看不到身份验证图标或Windows身份验证模式,请安装以下Windows功能:

Visual Studio Web调试(IIS Express)

最后,为了方便从VisualStudio进行Web调试,您可以在项目属性中启用Windows身份验证。打开解决方案资源管理器并选择您的项目:

然后打开“属性”选项卡并设置匿名身份验证和Windows身份验证:


有关更多详细信息,您可以签出。

我在IIS中启用了windows身份验证,但一旦启用了匿名,我就可以获得windows用户帐户,只有启用了匿名。此行应提示输入windows creds context.OwinContext.Authentication.Challenge();但是不起作用,所以我不确定是否还有其他设置需要设置。@Fab客户端有什么?是
HttpClient
?@Fab btw尝试显式指定身份验证模式:
context.OwinContext.authentication.Challenge(“Ntlm”)
。该客户端是隐式流Javascript客户端。我试着用谈判,但还是没有成功。我重定向到授权服务器,然后重定向回url中的令牌,对其进行解析,但一旦我尝试调用服务器端点,由于windows和我尝试匿名的原因,请求被拒绝,因此我可以请求获取JWT密钥,以在客户端验证令牌。