gpt4 book ai didi

c# - ASP.NET Web API 2 -> Windows 身份验证 -> 在 Azure 上模拟 Windows 用户

转载 作者:行者123 更新时间:2023-12-03 05:50:37 25 4
gpt4 key购买 nike

我们正在开发一个采用 Windows 身份验证 的应用程序,供公司内部使用。我们已经研究过 ADFS,但目前这不是一个选择。问题是我们的测试服务器完全基于 Azure 的云。我一直在寻找激活用户的方法,但没有找到好的解决方案。

我的第一个想法是完全关闭身份验证。这很有效,但我们有一些资源可以检查用户角色,所以我不得不放弃这个想法。

<system.web>
<authentication mode="None" />
</system.web>

返回 401 Unauthorizedauthentication mode="None" 的示例方法,显然:

[Authorize(Roles = "Administrator")]
[HttpGet]
[Route("TestMethod")]
public IHttpActionResult TestMethod()
{
return Ok("It works!");
}

我的第二个想法是编辑 WebApiConfig 并尝试在每个请求服务器端添加身份验证 header 。然而,当我开始研究 HTTP 的 NTLM 身份验证方案和 4 次握手时,我意识到这可能是不可能的。

NTLM Authentication Scheme for HTTP

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Other code for WebAPI registerations here
config.MessageHandlers.Add(new AuthenticationHandler());
}
}

class AuthenticationHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// Add authentication to every request...
return base.SendAsync(request, cancellationToken);
}
}

由于没有 Owin (Katana) 我无法编辑标准 App_Start -> Startup.Auth.cs -> public void ConfigureAuth(IAppBuilder app) 并尝试那里有什么东西。无论如何,我不知道如何构建“用户对象”。

对此我们能做些什么还是我们必须在本地测试所有内容?如果我们可以针对每个请求模拟一个用户登录,这在测试环境中就可以了。

最佳答案

在伪造身份验证和授权方面,您应该能够使用 FilterAttribute 设置具有适当角色的通用用户主体。

public class TestIdentityFilter :  FilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
filterContext.Principal = new GenericPrincipal(
new GenericIdentity(),
new string [] {"Administrator"});
}
}

您需要设置<authentication mode="None" />正如您之前所做的那样,否则此代码将永远不会在您的测试环境中被命中。

将此添加为全局过滤器将覆盖任何其他现有的身份验证系统(例如,如果您错误地将其部署到经过身份验证的环境)。显然,您需要非常小心地仅在测试系统中使用它。

这个例子是基于MVC的,我认为与WebApi有一些非常小的差异,但基本原则适用。

关于c# - ASP.NET Web API 2 -> Windows 身份验证 -> 在 Azure 上模拟 Windows 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48342531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com