BASIC認証をログインしたいのですが、認証ダイアログが出てきて、自動ログインできません。BASIC認証ではないのでしょうか?以下はEXCEL VBAからやってます。認証ダイアログが出てくるのはなぜでしょうか?


Sub bbbb()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
Const strURL = "https://ibox"
Const strHEAD = "Authorization: Basic amQ== " & vbCrLf
objIE.navigate2 strURL, , , , strHEAD
Do While objIE.Busy = True
DoEvents
Loop
End Sub

回答の条件
  • 1人2回まで
  • 登録:2009/10/16 14:09:18
  • 終了:2009/10/22 18:58:14

ベストアンサー

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862009/10/16 15:27:47

ポイント100pt

※ヘッダにベーシック認証の情報を乗せるような方法はわからないのですが、以下のようなやり方はいかがでしょうか?


私の紹介する方法は、URLにユーザー、パスワードを埋め込んで、ベーシック認証のページにアクセスする方法です。

ただし、

http://support.microsoft.com/kb/834489/ja

Internet Explorer では Web サイト アドレス (HTTP URL および HTTPS URL) に含まれるユーザー名およびパスワードがサポートされない

というセキュリティ上の都合があるため、ちょっと工夫が必要です。

(昔は可だったのですが、ある日セキュリティパッチで突然駄目になったんですw)


Option Explicit

'IEでベーシック認証を突破するには、セキュリティを落とす必要がある。(レジストリの修正)
Const REG_PATH = "HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE\"
Const IE       = "iexplore.exe"
Dim defaultFlag



Sub bbbb()

    'まずセキュリティ設定を解除
    Call BasicAuthSecurity(False)

    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True
    Const URL = "https://{0}:{1}@ibox"  'ユーザ、パスワードを埋めたこういう形式で送るのだ。
    Dim strURL
    strURL = URL
    strURL = Replace(strURL,"{0}","ユーザ名")
    strURL = Replace(strURL,"{1}","パスワード名")
    objIE.navigate2 strURL              'navigate2なのかnavigateなのかは知らないです
    Do While objIE.Busy = True
        DoEvents
    Loop

    'セキュリティ設定を戻す
    Call BasicAuthSecurity(True)

End


Function BasicAuthSecurity(flag)
    Dim WshShell, regValue
    Set WshShell = CreateObject("WScript.Shell")
    If flag = False Then
        'レジストリに設定が無い場合は作成
        On Error Resume Next
        regValue =  WshShell.RegRead( REG_PATH & IE )
        If Err.Number = 0 Then
            If regValue = 1 Then
                WshShell.RegWrite  REG_PATH & IE, 0, "REG_DWORD"    'セキュリティ解除
            End If
            defaultFlag = regValue
        Else
            WshShell.RegWrite  REG_PATH & IE, 0, "REG_DWORD"        'セキュリティ解除
            defaultFlag = 1
        End If
        On Error Goto 0

    Else
        If defaultFlag = 1 Then
            WshShell.RegWrite  REG_PATH & IE, 1, "REG_DWORD"        'セキュリティ設定
        End If
    End If
    Set WshShell = Nothing
End Function

参考になりますか?

(動作未確認です^^;)

その他の回答(1件)

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862009/10/16 15:27:47ここでベストアンサー

ポイント100pt

※ヘッダにベーシック認証の情報を乗せるような方法はわからないのですが、以下のようなやり方はいかがでしょうか?


私の紹介する方法は、URLにユーザー、パスワードを埋め込んで、ベーシック認証のページにアクセスする方法です。

ただし、

http://support.microsoft.com/kb/834489/ja

Internet Explorer では Web サイト アドレス (HTTP URL および HTTPS URL) に含まれるユーザー名およびパスワードがサポートされない

というセキュリティ上の都合があるため、ちょっと工夫が必要です。

(昔は可だったのですが、ある日セキュリティパッチで突然駄目になったんですw)


Option Explicit

'IEでベーシック認証を突破するには、セキュリティを落とす必要がある。(レジストリの修正)
Const REG_PATH = "HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE\"
Const IE       = "iexplore.exe"
Dim defaultFlag



Sub bbbb()

    'まずセキュリティ設定を解除
    Call BasicAuthSecurity(False)

    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True
    Const URL = "https://{0}:{1}@ibox"  'ユーザ、パスワードを埋めたこういう形式で送るのだ。
    Dim strURL
    strURL = URL
    strURL = Replace(strURL,"{0}","ユーザ名")
    strURL = Replace(strURL,"{1}","パスワード名")
    objIE.navigate2 strURL              'navigate2なのかnavigateなのかは知らないです
    Do While objIE.Busy = True
        DoEvents
    Loop

    'セキュリティ設定を戻す
    Call BasicAuthSecurity(True)

End


Function BasicAuthSecurity(flag)
    Dim WshShell, regValue
    Set WshShell = CreateObject("WScript.Shell")
    If flag = False Then
        'レジストリに設定が無い場合は作成
        On Error Resume Next
        regValue =  WshShell.RegRead( REG_PATH & IE )
        If Err.Number = 0 Then
            If regValue = 1 Then
                WshShell.RegWrite  REG_PATH & IE, 0, "REG_DWORD"    'セキュリティ解除
            End If
            defaultFlag = regValue
        Else
            WshShell.RegWrite  REG_PATH & IE, 0, "REG_DWORD"        'セキュリティ解除
            defaultFlag = 1
        End If
        On Error Goto 0

    Else
        If defaultFlag = 1 Then
            WshShell.RegWrite  REG_PATH & IE, 1, "REG_DWORD"        'セキュリティ設定
        End If
    End If
    Set WshShell = Nothing
End Function

参考になりますか?

(動作未確認です^^;)

id:t-wata No.2

t-wata回答回数82ベストアンサー獲得回数132009/10/16 21:08:30

ポイント40pt

Authorizationヘッダには、ユーザー名とパスワードを「:」で区切ってBase64でエンコードした値を指定します。

http://x68000.q-e-d.net/~68user/net/http-auth-1.html

「amQ==」はデコードすると「jd」となって、ユーザー名とパスワードの区切りである「:」自体が含まれないです。

まずは正しい認証情報を設定して試してみては?

id:shotomo

すみません。ここに載せるのに途中を消してしまいました。

Base64でエンコードホームページでエンコードはしました。

不明なことをしてすみませんでした。

2009/10/16 21:39:21
  • id:HALSPECIAL
    HALSPECIAL 2009/10/16 15:39:15
    間違えたかもしれないです。
    もしかすると、
      Const IE = "iexplore.exe"
    ではなく、
      Const IE = "excel.exe"
    または、
      Const IE = "ファイル名.xls"
    にしなければならないかもしれません。



  • id:HALSPECIAL
    HALSPECIAL 2009/10/16 17:06:42
    http://www.ken3.org/backno/backno_vba32.html
    なるほど、id:ken3memoさんのHPを参考にされたのですね。

    リンク先でダイアログが表示されてしまうのは、Authorization の情報がクライアントに埋め込まれないのが原因でしょうかね。(イメージ的には、認証後からスタートする感じでしょうか。)

    私の方法は別の切り口なので、いけると思うのですが、ユーザ、パスワードがプレーンテキストでリクエストされるのが難点です。
  • id:shotomo
    早いレスありがとうございます。ken3memoさんのそっくり真似たつもりなのですが。。。。
    明日会社で試し報告します。
  • id:shotomo
    アクセスが拒否されました (connect_method_denied)


    デフォルトでは許可されていないポート "512" に対してCONNECTが試行されました。
    443以外のポートを使用するHTTPSのURLが問題である可能性があります。

    このようなメッセージが出てだめです。だめなのでしょうか?
  • id:shotomo
    アクセスが拒否されました
    Access Denied
    原因として下記4点があります
    Below is the cause of the problem

    1.ブラウザのプロキシ設定に誤りがあります
      There is an error for the proxy setting of the browser


    詳細については、こちらをご参照ください
    For Details, refer to here in English


    2.ストリーミングコンテンツ(動画や音声)にアクセスしようとしています
      Connecting to streaming content (motion picture and voice)


    詳細については、こちらをご参照ください
    For Details, refer to here in English


    3.セキュリティ上問題のあるサイトにアクセスしようとしています
      Connecting to web site with security problems


    4.モバイルリンク経由で外部サイトにアクセスしようとしています
      Connecting to an external web site via MobileLink


    httpsをhttpにしたらこのようなメッセージになります。。。
  • id:HALSPECIAL
    HALSPECIAL 2009/10/17 21:23:50
    レジストリエディタを起動し、
    HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE\iexplore.exe
    の値を、1→0に変更する。

    IEを起動し、URL
    https://username:password@ibo
    もしくは、
    http://username:password@ibo
    を直接入力する。

    この操作で自動的にログインできるはずです。
    それをプログラム化するだけなんですけどね。^^;

    なお、私のほうでは、EXCELのVBAで同様の基本認証の自動ログインのテストをしたところ正常でクリアできました。
    (httpsでは確認できてないですけど)

    >デフォルトでは許可されていないポート "512" に対してCONNECTが試行されました。
    どうして443でなく、512なんでしょうね。
    https://username:password@ibo:443/
    としてポート番号を指定してみますか?

    あっ、最後にレジストリを戻して置いてください。
  • id:HALSPECIAL
    HALSPECIAL 2009/10/17 21:54:07
    言い忘れましたが、
    https://username:password@ibo
    の際のusername:passwordはbase64エンコードは不要です。
  • id:shotomo
    HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE\iexplore.exe
    の値を、1→0に変更する。

    この項目がありませんでした。

    他のサイトでレジストリに追加してやったことがありますが、だめでした。

    ID lasnet\5552222
    PASS 0512/a

    なんですが、https://lasnet/5552222:512/a@ibo....
    こうなり、全然接続できないです。

    https://5552222:0512/a@ibo....
    と入力するとhttps://5552222:512/a@ibo....
    0が消え
    アクセスが拒否されました
    Access Denied
    原因として下記4点があります。。。。。。

    でだめです。セキュリティがもっとあるのでしょうか?
  • id:HALSPECIAL
    HALSPECIAL 2009/10/21 12:47:36
    IDとパスワードにスラッシュ?バックスラッシュ?が入っているんですね。
    だとすると、そのままURLに含めても駄目かと思います。
    未確認ですが、IDとパスワードそれぞれを、URLエンコードして、
    https://username:password@ibox
    の形式にして、
    IEのURLに入れてアクセスしてみてください。
    これでOKであれば、プログラム中でURLエンコードを掛ければ良いですね。

    http://home.kendomo.net/board/decode/

  • id:shotomo
    エンコードで試します。回答していただきありがとうございました。期限が切れるのでポイントお礼します。
  • id:shotomo
    エンコードで見事出来ました。本当に親身になって考えていただきありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません