iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET的CoreAD域登录过程示例
  • 536
分享到

ASP.NET的CoreAD域登录过程示例

2024-04-02 19:04:59 536人浏览 独家记忆
摘要

目录来个ABC:新建一个ASP.net core项目建立一个LDAP操作的工具类在applicationSettings.JSON中添加基本的域配置Startup.cs中修改Acco

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

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

来个ABC:

新建一个ASP.Net Core项目

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的库是否有安全性问题,如果有需要修改或更换)

建立一个LDAP操作的工具类

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

ReGISter是获取基本配置信息的

Validate是来验证用户名密码的

using System;
using Microsoft.Extensions.Configuration;
using Novell.Directory.Ldap;
namespace Demo
{
    public class LDAPUtil
    {
        public static string Host { get; private set; }
        public static string BindDN { get; private set; }
        public static string BindPassWord { get; private set; }
        public static int Port { get; private set; }
        public static string BaseDC { get; private set; }
        public static string CookieName { get; private set; }
        public static void Register(IConfigurationRoot configuration)
        {
            Host = configuration.GetValue<string>("LDAPServer");
            Port = configuration?.GetValue<int>("LDAPPort") ?? 389;
            BindDN = configuration.GetValue<string>("BindDN");
            BindPassword = configuration.GetValue<string>("BindPassword");
            BaseDC = configuration.GetValue<string>("LDAPBaseDC");
            CookieName = configuration.GetValue<string>("CookieName");
        }
        public static bool Validate(string username, string password)
        {
            try
            {
                using (var conn = new LdapConnection())
                {
                    conn.Connect(Host, Port);
                    conn.Bind($"{BindDN},{BaseDC}", BindPassword);
                    var entities =
                        conn.Search(BaseDC,LdapConnection.SCOPE_SUB,
                            $"(sAMaccountName={username})",
                            new string[] { "sAMAccountName" }, false);
                    string userDn = null;
                    while (entities.hasMore())
                    {
                        var entity = entities.next();
                        var account = entity.getAttribute("sAMAccountName");
                        //If you need to Case insensitive, please modify the below code.
                        if (account != null && account.StringValue == username)
                        {
                            userDn = entity.DN;
                            break;
                        }
                    }
                    if (string.IsNullOrWhiteSpace(userDn)) return false;
                    conn.Bind(userDn, password);
                    // LdapAttribute passwordAttr = new LdapAttribute("userPassword", password);
                    // var compareResult = conn.Compare(userDn, passwordAttr);
                    conn.Disconnect();
                    return true;
                }
            }
            catch (LdapException)
            {
               
                return false;
            }
            catch (Exception)
            { 
                return false;
            }
        }

    }
}

在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

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
});

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/

以上就是asp.net的Core AD域登录过程示例的详细内容,更多关于ASP.NET Core AD域登录的资料请关注编程网其它相关文章!

--结束END--

本文标题: ASP.NET的CoreAD域登录过程示例

本文链接: https://www.lsjlt.com/news/144889.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET的CoreAD域登录过程示例
    目录来个ABC:新建一个ASP.NET Core项目建立一个LDAP操作的工具类在applicationSettings.json中添加基本的域配置Startup.cs中修改Acco...
    99+
    2024-04-02
  • ASP.NET的Core AD域登录过程怎么实现
    本文小编为大家详细介绍“ASP.NET的Core AD域登录过程怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET的Core AD域登录过程怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-29
  • 基于ASP.NET实现单点登录(SSO)的示例代码
    目录背景逻辑分析代码实现Service总结背景 先上个图,看一下效果: SSO英文全称Single Sign On(单点登录)。SSO是在多个应用系统中,用户只需要登录一次就可以访...
    99+
    2024-04-02
  • 微信用户访问小程序登录过程的示例分析
    这篇文章主要为大家展示了“微信用户访问小程序登录过程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信用户访问小程序登录过程的示例分析”这篇文章吧。概...
    99+
    2024-04-02
  • ASP.NET 通过拦截器记录错误日志的示例代码
    目录前言拦截器代码实战前言     主要是记录一下实现的错误日志拦截,可以在拦截器里面控制返回的信息,把错误信息处理后返回给请求端。 拦截器...
    99+
    2024-04-02
  • Python免登录实现域名解析的示例详解
    目录如何获得域名解析信息获取Token目标实现修改记录写此篇文章,我花10块购买了域名ssw.ski。 目的是编写python脚本,通过dnspod api获取个人域名内的dns解析...
    99+
    2023-03-09
    Python实现域名解析 Python域名解析 Python域名
  • python通过PyQt5实现登录界面的示例代码
    目录1. pyQt5简单使用 安装 界面化操作 2.开始实现登录界面今天为大家介绍一个利用开发登录界面模板,基于pyqt5库,pyqt5这也一个PythonGUI界面开发的库,非常强...
    99+
    2024-04-02
  • 微信小程序中后台登录的示例分析
    这篇文章主要介绍微信小程序中后台登录的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序 后台登录实现效果图:最近写了一个工具类的小程序,按需求要求不要微信提供的微信账...
    99+
    2024-04-02
  • 微信小程序实现登录界面示例
    本文实例为大家分享了微信小程序实现登录界面的具体代码,供大家参考,具体内容如下 注:这里使用的是原生微信小程序 使用wxss和wxml index.wxml文件中代码 <vie...
    99+
    2024-04-02
  • vue中登录注册的示例分析
    这篇文章主要介绍了vue中登录注册的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。步骤一1.安装脚手架:npm install vu...
    99+
    2024-04-02
  • HTML5实现QQ登录的示例分析
    这篇文章主要介绍了HTML5实现QQ登录的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。<!DOCTYPE html...
    99+
    2024-04-02
  • SpringBoot实现token登录的示例代码
    为什么引入token机制 在进行登录验证时,我们需要session或cookie会话进行验证,客户端包括浏览器、app、微信小程序、公众号,只有浏览器有session和cookie机...
    99+
    2024-04-02
  • SpringBoot实现扫码登录的示例代码
    目录一、首先咱们需要一张表二、角色都有哪些三、接口都需要哪些?四、步骤五、疯狂贴代码Spring Boot中操作WebSocket最近有个项目涉及到websocket实现扫码登录,看...
    99+
    2024-04-02
  • spring-security关闭登录框的实现示例
    事情要从同事的一个项目说起,项目中需要集成公司的单点登录系统,但是无论如何都无法跳转到正常的登录页面。相反,却始终跳转到另外一个登录页面。 但是代码却非常简单,简化一下 @Co...
    99+
    2024-04-02
  • Redis实现登录注册的示例代码
    目录1. 引言2. 流程图及代码实现2.1 生成验证码保存到Redis2.2 登录验证2.3 请求拦截器3. 总结1. 引言 在传统的项目中,用户登录成功,将用户信息保存在sessi...
    99+
    2024-04-02
  • Android实现微信登录的示例代码
    目录一、布局界面二、MainActivity.java微信登录的实现与qq登录类似。不过微信登录比较麻烦,需要拿到开发者资质认证,花300块钱,然后应用的话还得有官网之类的,就是比较...
    99+
    2024-04-02
  • React实现登录表单的示例代码
    作为一个Vue用户,是时候扩展一下React了,从引入antd、配置less、router,终于实现了一个简单的登录表单。 代码如下: import React from 'r...
    99+
    2024-04-02
  • Django实现简单登录的示例代码
    目录创建django项目使用模型的url.py加载静态文件页面跳转创建数据库模型提交表单提交ajax提交创建django项目 创建项目的命令行语句: django-admin st...
    99+
    2024-04-02
  • 小程序之授权、登录、session_key、unionId的示例分析
    这篇文章主要介绍小程序之授权、登录、session_key、unionId的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信应用的一个很大的优势就在于使用过程中是...
    99+
    2024-04-02
  • pyqt5制作登录窗口的详细过程
    首先要用designer设计ui界面 打开后就和c#一样拖动控件做ui界面 保存后是xxx.ui文件 再添加个工具 Arguments:-m PyQt5.uic.pyuic...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作