ASP.NET Core 2.0 LDAP Active Directory 認証 質問する

ASP.NET Core 2.0 LDAP Active Directory 認証 質問する

過去には次のような情報がたくさんありましたLDAP 認証はまだ有効になっていませんが、サードパーティのパッケージを使用してこれを回避できます。しかし、LDAP認証は1月に導入されたそれを実装する方法に関する情報が見つからないようです。

私は既に持っていますカスタム認証プロジェクトで設定したら、メソッドに入力するロジックだけが必要ですHandleAuthenticateAsync

私は使ってみましたその他の例ただし、.NET Core 2.0 では動作しないようです。

私が投稿できる唯一の関連コードはこれです

protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
    // Get Authorization header value
    if (!Request.Headers.TryGetValue(HeaderNames.Authorization, out var authorization)) {
        return Task.FromResult(AuthenticateResult.Fail("Cannot read authorization header."));
    }

    // TODO: Authenticate user

    // Create authenticated user ticket
    var identities = new List<ClaimsIdentity> { new ClaimsIdentity("custom auth type") };
    var ticket = new AuthenticationTicket(new ClaimsPrincipal(identities), Options.Scheme);

    return Task.FromResult(AuthenticateResult.Success(ticket));

    // else User not authenticated
    return Task.FromResult(AuthenticateResult.Fail("Invalid auth key."));
}

そこで質問なのですが、.NET Core 2.0 で LDAP 認証を実装するにはどうすればいいのでしょうか?

ベストアンサー1

ウィンズに感謝答え私が使う必要があると指摘してくれたことに対してWindows 互換機能パック、私はこれを理解することができました。

まず最初にやらなければならなかったのは、NuGet パッケージ

Install-Package Microsoft.Windows.Compatibility 

当時はプレビュー版が必要だったので、-Version 2.0.0-preview1-26216-02このコマンドの最後に

次に、usingステートメントを追加しますSystem.DirectoryServicesSystem.DirectoryServices.AccountManagement

次に、このロジックをHandleAuthenticateAsyncメソッドに挿入します。

const string LDAP_PATH = "EX://exldap.example.com:5555";
const string LDAP_DOMAIN = "exldap.example.com:5555";

using (var context = new PrincipalContext(ContextType.Domain, LDAP_DOMAIN, "service_acct_user", "service_acct_pswd")) {
    if (context.ValidateCredentials(username, password)) {
        using (var de = new DirectoryEntry(LDAP_PATH))
        using (var ds = new DirectorySearcher(de)) {
            // other logic to verify user has correct permissions

            // User authenticated and authorized
            var identities = new List<ClaimsIdentity> { new ClaimsIdentity("custom auth type") };
            var ticket = new AuthenticationTicket(new ClaimsPrincipal(identities), Options.Scheme);
            return Task.FromResult(AuthenticateResult.Success(ticket));
        }
    }
}

// User not authenticated
return Task.FromResult(AuthenticateResult.Fail("Invalid auth key."));

おすすめ記事