ASP.netでのローカルユーザ管理についての質問

このQ&Aのポイント
  • ASP.netを使用して、ブラウザでローカルユーザのパスワード変更を実現する方法について質問です。
  • System.DirectoryServicesを使用してユーザ名・グループ名の取得が可能であることがわかりましたが、認証も行えるのか教えてください。
  • ブラウザでパスワード変更を行うためには、ASP.netの実行ユーザに権限を与える必要がありますが、セキュリティ上の問題があるため他の方法はないのか教えてください。
回答を見る
  • ベストアンサー

ASP.netでのローカルユーザ管理についての質問です。

ASP.netでのローカルユーザ管理についての質問です。 ------------------------------ ■環境 Windows2003 Server IIS 6.0 SSL使用 .net Framework 2.0以降 開発言語 VB.net ------------------------------ いつもお世話になっております。 サーバに登録されているローカルユーザのパスワードを ブラウザで変更をできるようしたいと思っています。 手順としては、以下のような処理になると思うのですが、実現可能でしょうか? サーバ関連の知識はとても乏しくほぼ初心者ですので、用語や認識等に 間違いがあった場合、ご指摘ください。 (1)ブラウザに、ユーザ名・現在のパスワード・変更するパスワードを入力 (2)ユーザ名・現在のパスワードにて、ローカルユーザの認証を行う。 (3)認証OKの場合、パスワードの変更を行う。 ■課題 <1>ユーザ名・グループ名等は、「System.DirectoryServices」で取得できると ネットに載っていましたが、認証も行えるか? 認証を行う方法があれば教えてください。 <2>ブラウザでパスワード変更を行う場合、ASP.netの実行ユーザに権限を 与えないとできない。 セキュリティ上問題なのでそれ以外の方法はあるのか? 例えば、(2)で行った認証でOKなら、そのユーザの権限になってパスワード の変更を行う。(チェンジユーザ(?)は行える?) 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1の続き (文字制限つらい。バグは無視w) ※WindowsApplication1 コンパイルして「C:\WindowsApplication1.exe」として置く [Module1.vb] Imports System.Text Imports system.Runtime.InteropServices Module Module1 Enum AppSts STS_OK = 0 STS_NG_PRM_NON STS_NG_PRM_MDE STS_NG_PRM_CNT STS_NG_EXEC End Enum Sub AppExit(ByVal p_sts As AppSts) Environment.Exit(p_sts) End Sub Sub Main(ByVal p_aryPrm() As String) '引数存在チェック If (p_aryPrm.Length < 1) Then Call AppExit(AppSts.STS_NG_PRM_NON) Select Case p_aryPrm(0) Case "LGN" '引数の数チェック If (p_aryPrm.Length < 3) Then Call AppExit(AppSts.STS_NG_PRM_CNT) If Not chkLogon(p_aryPrm(1), p_aryPrm(2)) Then Call AppExit(AppSts.STS_NG_EXEC) Case "CHG" '引数の数チェック If (p_aryPrm.Length < 4) Then Call AppExit(AppSts.STS_NG_PRM_CNT) If Not chgPwd(p_aryPrm(1), p_aryPrm(2), p_aryPrm(3)) Then Call AppExit(AppSts.STS_NG_EXEC) Case Else Call AppExit(AppSts.STS_NG_PRM_MDE) End Select End Sub Enum LogonType LOGON32_LOGON_INTERACTIVE = 2 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31749&forum=7を参照 End Enum Enum LogonProvider LOGON32_PROVIDER_DEFAULT = 0 LogonTypeと同じ所を参照 End Enum <DllImport("advapi32.dll", CharSet:=CharSet.Ansi)> Function LogonUser(ByVal pszUsername As String, ByVal pszDomain As String, ByVal pszPassword As String, ByVal dwLogonType As LogonType, ByVal dwLogonProvider As LogonProvider, ByRef phToken As IntPtr) As Boolean End Function Function chkLogon(ByVal p_strUID As String, ByVal p_strPWD As String) As Boolean Dim l_ptrToken As IntPtr Return LogonUser(p_strUID, Environment.MachineName, p_strPWD, LogonType.LOGON32_LOGON_INTERACTIVE, LogonProvider.LOGON32_PROVIDER_DEFAULT, l_ptrToken) End Function Function chgPwd(ByVal p_strUID As String, ByVal p_strPWDOld As String, ByVal p_strPWDNew As String) As Boolean http://www.pinvoke.net/default.aspx/netapi32/NetUserChangePassword.html参照 Return NetUserChangePassword(Environment.MachineName, p_strUID, p_strPWDOld, p_strPWDNew) End Function End Module http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-1454.htm

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31503&forum=7

その他の回答 (1)

回答No.1

Windows認証は「LogonUser」というAPIで行います。 パスワード変更は、System.DirectoryServices以外に、LogonUserやNetUserSetInfoというAPIもあります。 (細かい使用方法は別に質問で^^;) 通常IISサーバは、権限が少ないユーザとして実行されています。 Account Operators権限を与えたり、Web.Config編集によるIISユーザ偽装で機能実現を行う事もできると思いますが、セキュリティ的に好ましくない状態となってしまいます。 ですので機能部を別のEXEにし、Admin権限を持ったユーザでそのExeをキックさせましょう。 [WebForm1.aspx]の抜粋 <div> Adminのパスワード<asp:TextBox ID="txtAdminPwd" runat="server" /><br /><br /> モード<asp:DropDownList ID="ddlMode" runat="server"> <asp:ListItem Text="認証" Value="LGN" Selected="true" /> <asp:ListItem Text="変更" Value="CHG" /> </asp:DropDownList><br /> 認証ユーザ<asp:TextBox ID="txtUID" runat="server" /><br /> PWD<asp:TextBox ID="txtPWD1" runat="server" /><br /> PWD新<asp:TextBox ID="txtPWD2" runat="server" /><br /> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> [WebForm1.aspx.vb] Imports System.Security '要:参照設定 Partial Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim l_aryPrm As New ArrayList l_aryPrm.Add(ddlMode.SelectedValue) l_aryPrm.Add(txtUID.Text) l_aryPrm.Add(txtPWD1.Text) l_aryPrm.Add(txtPWD2.Text) Call Exec(l_aryPrm.ToArray(GetType(String))) End Sub Sub Exec(ByVal prm As String()) Dim strMsg As String = "" Try Dim pinf As New ProcessStartInfo("C:\WindowsApplication1.exe", Join(prm, vbTab)) pinf.UserName = "Administrator" pinf.Password = New SecureString() For Each c As Char In txtAdminPwd.Text.ToCharArray() pinf.Password.AppendChar(c) Next pinf.UseShellExecute = False Using proc As Process = Process.Start(pinf) Call proc.WaitForExit() Select Case proc.ExitCode Case 0 : strMsg = "正常終了" Case 1 : strMsg = "引数無し" Case 2 : strMsg = "モードエラー" Case 3 : strMsg = "引数の数不正" Case 4 : strMsg = "認証/PWD変更のAPI失敗" End Select End Using Catch ex As Exception '偽装ユーザでの実行失敗などなど strMsg = "予期せぬエラー" Finally ClientScript.RegisterStartupScript(Page.GetType(), "s", String.Format("alert('{0}');", strMsg), True) End Try End Sub End Class

kazkaz11
質問者

お礼

1050YENさん 回答ありがとうございます。 お礼が遅くなり申し訳ありません。 ローカルPCにてVS2005で実行した時は問題なくできたのですが、サーバで環境を整え実行したところ、EXEからの戻りコードが「-1066598274」となりうまく動きませんでした。 また質問をさせていただいているので、よろしくければ回答をお願いいたします。

関連するQ&A

  • サーバ端末にローカルユーザを作成しておいて

    サーバ端末にローカルユーザを作成しておいて そのローカルユーザのパスワードを違う端末から変更する事 をWebを使ってやりたいのですが、可能ですか? イメージとしてはブラウザでそのページを開くと コンピュータ名、アカウント名、現在のパスワード、新しいパスワード 新しいパスワード(確認用)とテキストボックスが並んでいて、各項目を 入力後、送信ボタン押下でそのサーバ端末のパスワードを変更したいのです。 ローカルマシンでCtrl+Alt+Deleteでパスワードを変更する時のあんな感じで Webプログラムを実装したいのですが、可能でしょうか? もしできそうなら教えてください。 サンプルみたいのがどこかにあれば、それも教えて頂けるとうれしいです。 よろしくお願いします。

  • ASP.net1.0 Win7 IIS7

    ASP.net1.0 C#.net .net Framework 1.1 Windows7 Pro IIS 7 (1)ウェブセットアッププロジェクトを作成 (2)Windows7に.net Framework 1.1を導入 (3)ウェブセットアップを実行(一見正常完了) (4)IISマネージャーで Framework1.1を設定 実行しても残念ながら動きません。 ブラウザ上から通信が行われて居ない様な 「ページを表示できません」と言う表示に成っており 困っております。 ご存知の方どうぞお力をお貸しください

  • ASP.NETのユーザー権限について

    ASP.netとACCESSを接続しています。 INSERT文を記述して実行したところ、「更新可能なクエリであることが必要です」というエラーメッセージがでました。 これはmdbを保存しているフォルダにASP.netのユーザー権限がないから起こるエラーのようですが、ASP.netのユーザー権限はどのように設定するのでしょうか? ご存知の方がおられましたら教えて下さい。

  • ASPページを開くとユーザー名とパスワードを聞かれる

    ASP で作製したページを開くとユーザー名とパスワードを入力するダイアログが表示され、キャンセルするとエラーになります。 又、エクセルのデータを開こうとしても同様の現象が起きます。 他のサーバー上で同じ ASP ページ開いても上記のダイアログは表示されません。 ちなみに環境は Windows NT Server 4.0 SP6a IIS 4.0 ASP 2.0 です。 どなたか教えて下さい。

  • ウェブページでのユーザー名とパスワード設定方法

    WindowsXPでIISを使ってサーバーを構築しています。そのサーバーにあるウェブサイトの1部のページにユーザー名とパスワードを設定したいのですが、設定の仕方がわからず困っています。 今、IISの「ディレクトリセキュリティ」の「匿名アクセスおよび認証コントロール」で、「匿名アクセス」にチェックをつけ、「IISによるパスワードの管理を許可する」のチェックを外し、「統合Windows認証」のチェックがついた状態になっています。 この状態で、設定したディレクトリにアクセスするページのリンクをクリックした時に、ユーザー名とパスワードを聞いてくるようにはなったのですが、私が設定したユーザー名とパスワードを入れても「このページを表示する権限がありません」と表示され、ページを開くことができません。 複数のページに、それぞれ違うユーザー名とパスワードを設定したいと思っています。 初心者ですみませんが、アドバイス、どうぞよろしくお願いします。

  • Windowsのローカルユーザをプログラムで作成し、かつAdminis

    Windowsのローカルユーザをプログラムで作成し、かつAdministratorsグループ に入れる方法を教えてください。ローカルでVBS等を実行して作成する方法は Webサイトで見つけたんですが、これをネットワーク経由でやるにはどうすれば いいか分かりません。何かアドバイスがあれば、お願いします。 要件としては以下の通りです。 ・サーバ用端末にローカルユーザを作成 ・作成したローカルユーザをAdministratorsグループに追加 ・言語等の指定は特に無し(WebベースでASPとかで出来ますか?) 作成したい物のイメージとしては以下の通りです。(Webベースでやるならの話です) 1、ドメインユーザが自分の端末からWebサイトにアクセスしテキストボックスに 自分のドメインアカウント、パスワードを入力し、ログインする。 2、テキストボックスに作成したいローカルユーザのユーザ名、パスワードを 入力しOKボタン押下でサーバ端末にローカルユーザを作成し、Administrators グループにも追加する。 1は後実装でも実装無しでもいいので、特に2について意見を頂きたいです。 あまり、Webベースのプログラムに詳しくないので、的外れな事を言っているかも 知れませんが、例えば、ローカルで実行する事でローカルユーザを作成する事ができる WSH等をIISに配置して、ブラウザ経由でアクセスして上記2のようにローカルユーザ を作成する事って出来ますか? アドバイスよろしくお願いします。

  • ローカルとドメインのユーザー名とパスワードを同期させたい。

    Windows関連の質問です。ノートPCをセーフモードで起動する必要があり、各ユーザーにてローカルのアドミン権限でログインさせたいのですが、現状administratorのパスワードをユーザーに教えることはできずに困っています。リモートでログインしローカルユーザー(アドミン権限あり)を作成すれば対応可能ではと思っているのですが、できればドメインのユーザー名と同じローカルのユーザーを作成できればと思っています。また、ドメイン上でパスワードを変更するとそのローカルユーザーのパスワードも自動で変更されるような設定したのですが、方法がわかりません。勉強不足でお恥ずかしいはなしなのですが、皆様のお知恵を拝借できればと考えております。よろしくお願いいたします。

  • ユーザー認証ダイアログをパスしたい。

    No.1236392で、質問しました者ですが、再度質問させて下さい。 ハード(ネットワークカメラ)へアクセスする際、ユーザー認証ダイアログが表示されます。 これは、クライアントがWebサーバーからコード401を受信するからです。 実現したい事は、ASPファイル内で、ASP(VBScript)を用いて、ユーザー名とパスワードをセットしておき、ユーザー認証ダイアログを通過(パス)させたい、つまり表示させたくないです。 具体的には、ASPファイルは、自分で作ったWebアプリケーションの一部で、Webアプリケーションにログイン認証を設けて、ここで1度認証を行っています。 つまり、認証に成功してアプリケーションを操作できるという仕組みにして、最初に認証したユーザ名、パスワードの情報を引き継いで、ネットワークカメラにアクセスする際、わざわざユーザー認証ダイアログを出さずとも(ここではWebアプリケーションの認証(ユーザ名・パスワード)と、ネットワークカメラへの認証(ユーザ名・パスワード)は同じ情報と仮定する)、ユーザー名、パスワード情報を知っているので、その情報を埋め込んで、ユーザー認証ダイアログを飛ばしたいという魂胆です。 OS:Windows2000Server→ゆくゆくはWindows2003Serverにします。 Webブラウザ:IE6 自分なりにも調べましたが、 ・WININET APIを使用したら可能。 ・InternetSetOption関数を用いてユーザー名、パスワードをセットする。 ・検索で、「利用者認証をパスするには」等の 情報で、出来るような事がインターネット上で書いてありましたが、上手く活用する事ができません。 なんとかWebブラウザで実現させたいので、皆さんの力を貸して下さい。

  • ASP.NET2.0のLOGINコントロールとORACLEについて

    こんにちは。 ASP.NET2.0(VB2005)のLOGINコントロールを利用して 認証をしたく考えております。 その際にORACLE9iのデータベースに登録されているユーザー マスタのIDとパスワードに一致した場合の時に認証OK とする方法が分かりません。 ご存じの方お見えでしたら教えていただけないでしょうか? 宜しく御願いいたします。

  • visual web developer 2008とasp.net2.0について

    いつもお世話になっております。 さて、現在Visual Web Developer 2008にてasp.net2.0用システム開発を検討しており、動作環境等をテスト的に検証しています。 サーバ機とは別のマシンでVisual Web Developer 2008にて適当なページを作成し、サーバのIISの仮想ディレクトリ内へ移動し、サーバのie6.0で表示というテストなのですが、webconfigの所、webconfigを配置しない場合はページディレクティブの所で解析エラーが発生してしまいます。 ●サーバ環境 OS:Windeows server 2003 ASP.NET .NET framework 2.0 をインストール済みです。 IISマネージャのwebサービス拡張の画面では Active server pager ASP.NET 1.14… ASP.NET 2.0… を許可する設定にしております。 エラー内容としましては "構成セクションconnectionstringsを認識できません" 等の構文エラー、解析エラーなのですが、ページの一番下部分に バージョン情報 Mirrosoft .NET framework バージョン 1.143322…、Asp.net version 1.143322… と表記されています。 これはVASP.NET2.0以上用のシステムが、ASP.NET1.1で実行されているということでしょうか? もしその場合どのようにすれば解決できるのでしょうか? ちなみにIISマネージャにてASP.NET 1.14…のほうを禁止にすると、空白のページが表示されます。 ご存知の方いらっしゃいましたらご教授いただければ幸いです。 また、情報が不足している場合補足要求いただけますようお願いいたします。

専門家に質問してみよう