ASP.NET Core AD 域登录

在选择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/

时间: 2024-10-25 16:05:24

ASP.NET Core AD 域登录的相关文章

asp net 发布域控制-asp.net iis发布域登录控制

问题描述 asp.net iis发布域登录控制 企业内部使用了域管理,客户要求主页不需要域登录也能看到,但是除了主页之外的页面就需要 域登录成功才能看见. 现在我知道怎样实现域登录并获取登录用户域里面的信息,就是不知道怎样把主页剔除开来不需要域登录就能看见. 请各位不吝赐教!!

VB.NET编写一个连接AD域登录窗口

问题描述 我要用VB.NET编写的连接AD域登录窗口,账户登录为域帐户.但是登录账户要属于域内一个安全组,如果不再组内账户将无法登录.希望高手给出代码解答,如果有样例程序可以发我QQ邮箱:31569865@qq.com谢谢. 解决方案 解决方案二:没做过.SERVER系统在账户属性那里设置好就可以了.能不能登陆是你的账户所属用户组问题.

ASP.NET Core集成微信登录_实用技巧

工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login).申请接口测试号无需公众帐号,可以直接体验和测试公众平台所有高级接口. 1.1 配置接口信息 1.2 修改网页授权信息 点击"修改"后在弹出页面填入你的网站域名: 2 新建网站项目 2.1 选择ASP.NET C

SharePoint2013 以其他用户登录和修改AD域用户密码

  sharepoint默认是没有修改AD密码 和切换 用户的功能,这里我用future的方式来实现. 部署wsp前: 部署后: 点击以其他用户身份登录 点击修改用户密码: 这里的扩展才菜单我们用CustomAction来实现,我们需要添加空项目来部署它 以其他用户身份登录得xml如下: 修改用户密码的xml如下: 这里我们需要新建一个应用程序页面,首先需要添加路径映射: 添加应用程序页面的代码如下: <%@ Assembly Name="$SharePoint.Project.Assem

【求助】C# asp.net BS架构 如何实现域登录

问题描述 紧急求助,万分感谢!!!一个公司的内部网站,要求提供form登录和域登录,form登录容易办,但是如何实现域登录?域登录的要求是构建一个AD域,域服务器保存了域里面所有机器的用户名和密码(其实就是windows登录时使用的那个账户),然后打开这个网站的时候,可以免去用户输入,直接使用windows账户登录.(具体效果就像QQ客户端那样,在客户端登录了,可以免输入直接进入QQ邮箱等....虽然说原理不一样,但是想做到效果差不多的,毕竟电脑开了就算是在客户端登录了,然后打开该网站就不要再登

ASP.NET Core中集成微信快捷登录的程序

工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login).申请接口测试号无需公众帐号,可以直接体验和测试公众平台所有高级接口. 1.1 配置接口信息 1.2 修改网页授权信息   点击"修改"后在弹出页面填入你的网站域名:   2  新建网站项目  2.1 选择ASP

SSO单点登录,AD域,CS

问题描述 各位大神好:请大家介绍一款开源的SSO单点登录系统,要求支持AD域控,支持C/S.,B/S网上看到的casopensso没找到支持AD,c/s的资料. 解决方案 解决方案二:楼主请参考解决方案三:只用过cas--唉,眼界太窄

谈谈如何在ASP.NET Core中实现CORS跨域_实用技巧

CORS(Cross-origin resource sharing)是一个W3C标准,翻译过来就是 "跨域资源共享",它主要是解决Ajax跨域限制的问题. CORS需要浏览器和服务器支持,现在所有现代浏览器都支持这一特性.注:IE10及以上 只要浏览器支持,其实CORS所有的配置都是在服务端进行的,而前端的操作浏览器会自动完成. 在本例中,将演示如何再ASP.NET Core中实现CORS跨域. 前期准备 你需要windows系统. 你需要安装IIS. 推荐使用VS2015 Upda

ASP.NET能否在服务端获取客户端的域登录名,客户端和服务端在同一个域内

问题描述 ASP.NET能否在服务端获取客户端的域登录名,客户端和服务端在同一个域内 解决方案