質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LDAP

LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Active Directory

Active Directoryは、 Windows Serverの機能の一つで、 マイクロソフトによって作られたディレクトリサービスです。 ネットワーク上に存在する様々なハードや利用者情報のアクセス権限などを一元管理が出来ます。

Q&A

0回答

1481閲覧

.NET Core 3.1 + Ubuntu Server 20.04 環境で LDAP Filterで日本語 が使えない

hazigin

総合スコア0

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LDAP

LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Active Directory

Active Directoryは、 Windows Serverの機能の一つで、 マイクロソフトによって作られたディレクトリサービスです。 ネットワーク上に存在する様々なハードや利用者情報のアクセス権限などを一元管理が出来ます。

0グッド

0クリップ

投稿2021/12/18 00:32

前提・実現したいこと

フロントはBlazor Webassembly,バックエンドはASP.NET Core web apiで開発しています。
環境は.NET Core 3.1 + Ubuntu 20.04 環境です。
バックエンドでActive Directoryに問い合わせを行っていますが日本語で検索をかけるところで躓いています。

// LDAP接続情報 LdapDirectoryIdentifier identifier = new LdapDirectoryIdentifier("AD serve", true, false); // LDAP接続用ID情報 NetworkCredential credential = new NetworkCredential("XXXXXX@XXXXXX", "YYYYY"); connection = new LdapConnection(identifier, credential, AuthType.Basic); //Shift-JIS変換用 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); string utf8str = @"(name=*テスト*)"; //utf8str = "(sAMAccountName = 123456)"; byte[] bytesData = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(utf8str); Encoding sjisEnc = Encoding.GetEncoding("shift_jis"); string sjis = sjisEnc.GetString(bytesData); schRequest.Filter = utf8str; //schRequest.Filter = sjis;

上記にようにしていてWindows上のデバッグではnameで検索すると結果がヒットしますが、Ubuntu上で動かすと結果が0件になります。
しかし半角のみのsAMAccountName だとWindows上は当然ですが、Ubuntu上でも結果が返ってきます。

Filterに渡す値を上記ではshift_jisにしていますがUTF-8に変更してみたりしましたが駄目でした。
またldapsearchの表示がbase64なのでそのままbase64の値をnameに設定してみたりもしました。
しかし結果は返りませんでした。

Active Directoryに対し日本語で検索をかけるにはどうすればよいのでしょうか?
ご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/12/18 00:51

あくまで推測ですが、文字列エンコーディングに使用する既定のコードページがWindowsとUbuntuで違うのではないでしょうか。 以下のコード部分です。 > System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); [CodePagesEncodingProvider] https://docs.microsoft.com/ja-jp/dotnet/api/system.text.codepagesencodingprovider.instance?view=netcore-3.1 動いているWindowsのコードページを調べ、Ubuntu上で動作させるときに合わせるなどすると動作するかもしれません。ただ、Ubuntu側でそれなりの設定作業をしないとダメかも。
hazigin

2021/12/18 02:02

ご回答ありがとうございます! 恥ずかしながらこの辺きちんと理解しませんでした。。。 この辺当たってみます!
dodox86

2021/12/18 02:08

回答未満なので回答ではないです。お試しの現状を補間すべく、「その辺りをWindowsとUbuntuで意識合わせして試したらどうなるでしょうか?」程度のコメントです。可能ならば試してみて、もしOKだったら対応策を投稿して自己解決、質問をクローズしてください。NGであれば引き続き別の回答を待っても良いと思います。
hazigin

2021/12/28 04:49

WindowsとUbuntu間の差異を無くすために上記のようにハードコーディングで検索式を書きこみ、Filterに渡す前に Unicode(UTF-16) UTF-8 Shift-JIS と試してみたのですがやはり日本語では何も返ってきません。 >LDIF形式は、マルチバイトをBASE64でエンコードすることになっていますので、エンコードされ >ている文字列を文字コード指定(UTF-8)でBASE64デコードすると元の漢字に戻ります。 という記載を見つけたのでFilterに渡す時にUTF-8 -> BASE64にしてみてもやはりだめでした。 何か良いお知恵ありますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問