過去には次のような情報がたくさんありました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.DirectoryServices
。System.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."));