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

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

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

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

C#

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

LDAP

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

Ubuntu

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

Active Directory

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

受付中

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

hazigin
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評価

0クリップ

544閲覧

投稿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に対し日本語で検索をかけるにはどうすればよいのでしょうか?
ご教授いただければ幸いです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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にしてみてもやはりだめでした。 何か良いお知恵ありますでしょうか?

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

.NET Core

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

C#

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

LDAP

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

Ubuntu

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

Active Directory

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