以编程方式授权ASP.Net

时间:2020-10-09 17:52:05

标签: c# asp.net

我在项目中有多个<table id="codexpl"> <tr> <th>No</th> <th>Club</th> <th>Points</th> </tr> <tr> <td>row 1 col 1</td> <td>row 1 col 2</td> <td>row 1 col 3 </td> </tr> <tr> <td>row 2 col 1</td> <td>row 2 col 2</td> <td>row 2 col 3 </td> </tr> </table> 。我已经将这些处理程序注册到RouteCollection以获取特定URL上的触发器。

我希望以编程方式使用某些处理程序。我不想在IHttpHandler中使用以下设置。我不能使用web.config属性,因为它没有使用asp.net MVC中看到的Controller。

[Authorize]

当前项目不在任何地方使用<system.web> <authorization> <allow users="*"/> </authorization> </system.web>

它正在使用System.Web.Routing.Route()通过返回IHttpHandler的自定义创建的类System.Web.Mvc注册路线信息。该处理程序示例:https://docs.microsoft.com/en-us/dotnet/api/system.web.ihttphandler.processrequest?view=netframework-4.8#examples

2 个答案:

答案 0 :(得分:0)

我不确定这是否会对旧的MVC有帮助,但这是您在AspNetCore中间件中可以做到的方式。

基本上,您应未授权的请求返回401握手,MVC管道应为您进行身份验证。下次您检查用户是否已通过身份验证时,如果用户已通过,则跳过握手;如果先前失败,则请求身份验证。

我在中间件中执行此操作,该中间件在请求到达控制器之前就将其拦截。

if (context.User?.Identity?.IsAuthenticated != true)
{
    context.Response.StatusCode = 401;
    context.Response.Headers.Add("www-authenticate", new StringValues(new[] { "Negotiate", "NTLM" }));
    await context.Response.CompleteAsync();
}

我认为旧的MVC应该相似,但是您的里程可能会有所不同。

答案 1 :(得分:0)

每个问题OpenID documentation都显示了如何在Authenticate事件中进行身份验证,因此可以使用ASP.NET管道将global.asax中的Authenticate_Request个事件挂接到这里为了清楚起见:

//file: Global.asax.cs
...
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    OpenIdAuthentication.Authenticate();
}