ASP.NET Core AD 域登录

简介: 在选择AD登录时,其实可以直接选择 Windows 授权,不过因为有些网站需要的是LDAP获取信息进行授权,而非直接依赖Web Server自带的Windows 授权功能。 当然如果使用的是Azure AD/企业账号登录时,直接在ASP.NET Core创建项目时选择就好了。

在选择AD登录时,其实可以直接选择 Windows 授权,不过因为有些网站需要的是LDAP获取信息进行授权,而非直接依赖Web Server自带的Windows 授权功能。

当然如果使用的是Azure AD/企业账号登录时,直接在ASP.NET Core创建项目时选择就好了。

来个ABC:

1.新建一个ASP.NET Core项目

2.Nuget引用dependencies / 修改```project.json```

Novell.Directory.Ldap.NETStandard

Microsoft.AspNetCore.Authentication.Cookies

版本如下:

"Novell.Directory.Ldap.NETStandard": "2.3.5",

"Microsoft.AspNetCore.Authentication.Cookies": "1.1.0"

本文的AD登录使用的是第三方的

```Novell.Directory.Ldap.NETStandard``` 进行的LDAP操作(还没有看这个LDAP的库是否有安全性问题,如果有需要修改或更换)

3.建立一个LDAP操作的工具类

代码在下面链接中,就不单独贴了,基本上就2个方法:

Register是获取基本配置信息的

Validate是来验证用户名密码的

https://github.com/chsword/aspnet-core-ad-authentication/blob/master/src/Demo/LDAPUtil.cs

4.在applicationSettings.json中添加基本的域配置

"LDAPServer": "192.168.1.1",//域服务器

"LDAPPort": 389,//端口,一般默认就是这个

"CookieName": "testcookiename",//使用Cookie登录的Cookie的Key

"BindDN": "CN=DoWebUser,CN=Users",//用来获取LDAP的信息用户的用户名

"BindPassword": "!DoWebUserPassword",//用来获取LDAP的信息的用户的密码,即DoWebUser的密码

"LDAPBaseDC": "DC=aspnet,DC=com",//域的DC

5.Startup.cs中修改

Startup方法中:

LDAPUtil.Register(Configuration);

ConfigureServices 方法中:

services.AddAuthorization(options =>{});

Configure方法中:

app.UseCookieAuthentication(new CookieAuthenticationOptions()

{

AuthenticationScheme = Configuration.GetValue<string>("CookieName"),

LoginPath = new PathString("/Account/Login/"),

AccessDeniedPath = new PathString("/Account/Login/"),

AutomaticAuthenticate = true,

AutomaticChallenge = true

});

6.AccountController中添加登录和注销的Action

登录的页面:

[AllowAnonymous]

public IActionResult Login()

{

    return View();

}

登录的Post页面:

[HttpPost]

[AllowAnonymous]

public async Task<IActionResult> Login(string u, string p)

{

    if (LDAPUtil.Validate(u, p))

    {

        var identity = new ClaimsIdentity(new MyIdentity(u));//这个MyIdentity只是一个祼的IIdentity的实现的类

        var principal = new ClaimsPrincipal(identity);

        await HttpContext.Authentication.SignInAsync(LDAPUtil.CookieName, principal);

        return RedirectToAction("Index", "Home");

    }

    return View();

}

注销的页面:

[Authorize]

public async Task<IActionResult> Logout()

{

   await HttpContext.Authentication.SignOutAsync(LDAPUtil.CookieName);

   return RedirectToAction("Index", "Home");

}

 

Demo

https://github.com/chsword/aspnet-core-ad-authentication

 

引用

https://github.com/dsbenghe/Novell.Directory.Ldap.NETStandard

https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.Cookies/

目录
相关文章
|
11天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
68 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
41 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
60 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
32 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0