使用 C# 重置用户密码而不需要 AD、LDAP 或 ASP.net

问题描述

嘿,我遇到了需要重置 Windows 10 用户密码的问题。目前我看到的唯一例子都涉及 ASP.net、Active Directory/LDAP。

ASP.net 示例:

server {
    server_name  www.example.com;
    return       301 $scheme://example.com$request_uri;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-Nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {

        root /usr/share/Nginx/html;
        index index.html index.htm;

        client_max_body_size 4G;

        access_log /home/myuser/myproject/logs/Nginx-access.log;
        error_log /home/myuser/myproject/logs/Nginx-error.log;

        server_name example.com ;
        
        add_header Content-Security-Policy "frame-ancestors *.exampledomain.com" always;

        location /static/ {  alias   /home/myuser/myproject/staticfiles/; }    
        location /media/ {  alias   /home/myuser/myproject/media/; }

        

        location / {
                     proxy_pass http://unix:/home/myuser/myvenv/myproject/daphne.sock;
                     proxy_http_version 1.1;
                     proxy_set_header Upgrade $http_upgrade;
                     proxy_set_header Connection "upgrade";
                     proxy_redirect     off;
                     proxy_set_header   Host $host;
                     proxy_set_header   X-Real-IP $remote_addr;
                     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_set_header   X-Forwarded-Host $server_name;
                     proxy_read_timeout 240;
                     proxy_connect_timeout 240;
                     proxy_send_timeout 240;
                     send_timeout 240;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-Nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name example.com ;
    return 404; # managed by Certbot
}

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name  www.example.com;
    return 404; # managed by Certbot
}

Active Directory/LDAP 示例:

var id = 23598777;
var newpw = "blahlbhalbha";

var user = await UserManager.FindByIdAsync(id);
var token = await UserManager.GeneratePasswordResetTokenAsync(user);
var result = await UserManager.ResetPasswordAsync(user,token,newpw);

上面的代码自然会出错:

无法联系到服务器。

我还注意到,仅使用 UserPrincipal.FindByIdentity 有一个上下文传递,其中包含“Machine”作为选项:

string UN = "bob";
string PW = "Blhblahblah";

using (var context = new PrincipalContext(ContextType.Domain))
{
    using (var user = UserPrincipal.FindByIdentity(context,IdentityType.SamAccountName,UN))
    {
         user.SetPassword(PW);
    }
}

遗憾的是,虽然在尝试上述操作时,我在 ContextType.Machine 部分出现了错误

CS1503 参数 1:无法从 'System.DirectoryServices.AccountManagement.ContextType' 到 'System.DirectoryServices.AccountManagement.PrincipalContext'

那么有没有人拥有无需 Active Directory/LDAP 或 ASP.net 即可完成此操作的 C# .net 代码

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)