• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

WPF & .htaccess Schutz

T

ToM80

Guest
Es ist zum Haare ausreißen.
Ich hatte ja vor kurzem schon ein Thread zum .htaccess. Der das Problem nun aber eingegrenzt ist, eröffne ich ein neues.
Es geht um folgendes:
Eine mittels htaccess geschützte Seite soll direkt aus einer WPF-Desktop Anwendung aufgerufen werden.
Hierfür wird auf die Methode WebBrowser.Navigate() zurück gegriffen.
Leider funktioniert die Überagbe der URL mittels
Code:
http://user:password@subdomain.domain.tld
nicht. Es wird die Fehlermeldung "0x800C000E) geworfen.
Dies ist verwunderlich, da in Windows Forms das ganze ohne Probleme durchgeht.

Ich bin da darauf gestoßen, dass man die Daten im Header mitgeben kann. Angeblich soll das auch funktionieren (http://peter.hahndorf.eu/blog/2006/08/19/BasicAuthenticationInTheWebBrowserControl.aspx). Tut es aber leider in meinem Fall nicht.
Ich gelte weiterhin als "unauthorized" und das Fenster für Username und Passwd gehen weiterhin auf.
Folgendermaßen sieht meine Test-Window-XAML aus:
Code:
<Window x:Class="webbrowsercontrol.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="HTACCESS Pass Through Test" Width="1024" Height="768">
    <Grid>
          <Grid.Background>
                   <LinearGradientBrush MappingMode="RelativeToBoundingBox" EndPoint="0.5,1" StartPoint="0.5,0">
                             <GradientStop Color="#FF000000" Offset="0"/>
                             <GradientStop Color="#FF52698D" Offset="1"/>
                   </LinearGradientBrush>
          </Grid.Background>
          <Grid.ColumnDefinitions>
                   <ColumnDefinition Width="0.226*"/>
                   <ColumnDefinition Width="0.774*"/>
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
                   <RowDefinition Height="0.091*"/>
                   <RowDefinition Height="0.755*"/>
                   <RowDefinition Height="0.154*"/>
          </Grid.RowDefinitions>
          <TextBlock Margin="1,1,1,1" Text="Navigate To" TextWrapping="Wrap" Foreground="#FFF4EAEA"/>
          <TextBox x:Name="txtLoad" Margin="0,1,0,1" Grid.Column="1" Text="" TextWrapping="Wrap" Background="#FFBDA4A4" HorizontalAlignment="Stretch" Cursor="No" Foreground="#FFE91D1D" Width="Auto" Height="30" VerticalAlignment="Top"/>
          <Border Margin="1,1,1,1" Grid.ColumnSpan="2" Grid.Row="1" BorderBrush="#FF000000" BorderThickness="1,1,1,1">
				   <WebBrowser x:Name="myBrowser" Margin="0,0,0,0" Cursor="Arrow"/>
          </Border>
   </Grid>
</Window>
Hier der zugehörige C# Code:
PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace webbrowsercontrol
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            System.Uri uri = new Uri("http://supdomain.domain.tld/folder/file.asp");
            byte[] authData = System.Text.UnicodeEncoding.UTF8.GetBytes("username: password");
            
            string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData) + "\r\n";
            myBrowser.Navigate(uri, "", null, authHeader);
        }
    }
}
 
Ich hatte mich mal vor langer Zeit mit der HTTP-Authentifikation etwas näher beschäftigt und soweit ich das noch weiß ist das Leerzeichen nach dem ":" falsch - das muss da weg.
(Ich wollte mich per AJAX anmelden - bin dann aber im Laufe der Arbeit darauf gestoßen, dass das man das im open mitgeben kann:
Code:
			this.setRequestHeader('Authorization', 'Basic ' + kkjs.encodeBase64(this.user + ":" + this.password));
)
 
Nein die Leerzeichen sind in diesem Fall irrelevant, das hatte ich schon probiert, danke trotzdem.
 
Zurück
Oben