C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

soap通信を行うクライアントにてbasic認証を行いたい

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■97634 / inTopicNo.1)  soap通信を行うクライアントにてbasic認証を行いたい
  
□投稿者/ mofuramei (1回)-(2021/06/17(Thu) 15:57:27)

分類:[C#] 

●開発環境
windows10
Visual Studio 2019
C# .NET Framework4.7.2
IIS 10

●目的
soap通信を行うクライアントにてbasic認証を行いたい

●現在の問題点
basic認証を行うクライアントの作成の仕方がわからない為、ご存じの方がいれば教えて頂けませんでしょうか。


●現在の状態
hostsへ「127.0.0.1 soap.testsv.jp」を追記しローカルにてテスト。

1)soapサーバ側テスト処理
2)soapクライアント側テスト処理
3)IIS設定(basic認証無し)
4)IIS設定(basic認証有り)(ユーザー:webtest パス:aiueo)

a)(1)+(2)+(3)の組み合わせにてsoap通信を使用した処理が実行される事を確認。
b)(1)+(4)の組み合わせにてブラウザでアクセスすると処理可能な事を確認。
c)(1)+(2)+(4)の組み合わせにてsoap通信を使用した処理を実行するとエラーが発生。

<参考にしたサイト>
soap通信[https://www.ipentec.com/document/csharp-call-soap-web-service]
IIS設定(basic認証)[https://webbibouroku.com/Blog/Article/iis-basic]
IIS設定(証明書作成)[http://korekurai.com/itrelated/iis-localhost-create-self-signed-certificate.html]

<作成したサンプル処理>
サーバ[https://github.com/mofuramei/test_asmx_soap.git]
クライアント[https://github.com/mofuramei/test_soap_client.git]

●試した事
クライアントにて
ClientCredentials.UserName.UserName
ClientCredentials.UserName.Password
をセットして呼出しを行ったが、エラー。


下記を参考に改造を行ってみたが、エラーを解消する事ができませんでした。
[https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-with-basic-authentication]

下記が答えに該当すると思われるが、使用方法がわかりませんでした。
[https://base64.work/so/c%23/3571026]


引用返信 編集キー/
■97635 / inTopicNo.2)  Re[1]: soap通信を行うクライアントにてbasic認証を行いたい
□投稿者/ WebSurfer (2268回)-(2021/06/17(Thu) 16:23:33)
No97634 (mofuramei さん) に返信

> 下記が答えに該当すると思われるが、使用方法がわかりませんでした。
> [https://base64.work/so/c%23/3571026]

それだけ見て回答しているのでハズレだったらすみません。

基本認証での Web サーバーとクライアントのやり取りは以下の記事に書いてあるように
なります。画像の赤枠部分に注目してください。

基本認証
http://surferonwww.info/BlogEngine/post/2015/11/23/basic-authentication.aspx

質問者さんが参考にされている記事の最後の方には、"Basic " という文字列と[ユーザ名]
と[パスワード]をコロン ":" でつなぎ Base64 でエンコードした文字列を結合した文字列
をコードで組み立てて、要求ヘッダの Authorization として送ればよいと書いてあるよう
です。
引用返信 編集キー/
■97636 / inTopicNo.3)  Re[2]: soap通信を行うクライアントにてbasic認証を行いたい
□投稿者/ mofuramei (2回)-(2021/06/17(Thu) 16:42:02)
No97635 (WebSurfer さん) に返信
> 基本認証での Web サーバーとクライアントのやり取りは以下の記事に書いてあるように
> なります。画像の赤枠部分に注目してください。
>
> 基本認証
> http://surferonwww.info/BlogEngine/post/2015/11/23/basic-authentication.aspx
>
> 質問者さんが参考にされている記事の最後の方には、"Basic " という文字列と[ユーザ名]
> と[パスワード]をコロン ":" でつなぎ Base64 でエンコードした文字列を結合した文字列
> をコードで組み立てて、要求ヘッダの Authorization として送ればよいと書いてあるよう
> です。

リクエストを送るときにヘッダへ埋め込む方式だというのはわかるのですが、

サービス参照を追加にて作成したプロキシクラス?で使用する方法が理解できておりません。
テストで作成したクライアントだと soapsvtest.WebService1SoapClient を指しております。


引用返信 編集キー/
■97652 / inTopicNo.4)  Re[1]: soap通信を行うクライアントにてbasic認証を行いたい
□投稿者/ mofuramei (1回)-(2021/06/21(Mon) 23:31:38)
プロキシクラス生成を
サービス参照ではなくweb参照より行い
NetworkCredentialよりユーザー、パスワードを設定すれば使用できたので解決済みとします。

プロキシクラスを生成した時にどこを改修すれば良いか不明な箇所が多い(情報が少ない)為、
HttpWebRequestから直接XMLでやり取りしようと検討しています。

もし、同じような実装をされた方が居れば情報(プロキシクラス生成の有り無しに関わらす)を教えて頂けると嬉しいです。
ありがとうございました。

解決済み
引用返信 編集キー/
■97670 / inTopicNo.5)  Re[1]: soap通信を行うクライアントにてbasic認証を行いたい
□投稿者/ 魔界の仮面弁士 (3140回)-(2021/06/23(Wed) 20:32:43)
No97634 (mofuramei さん) に返信
> サーバ[https://github.com/mofuramei/test_asmx_soap.git]
> クライアント[https://github.com/mofuramei/test_soap_client.git]

ソースを目視しただけで、試してはいませんが…
ウチだと、こんな感じで通しています。


// using System;
// using System.ServiceModel;
// using System.IdentityModel.Tokens;

// soapsvtest.WebService1SoapClient cl = new soapsvtest.WebService1SoapClient();
// string value = cl.AddQuote(textBox1.Text);

var bind = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
bind.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
var address = new EndpointAddress(new Uri("http://soap.testsv.jp/test/WebService1.asmx"));

var cl = new soapsvtest.WebService1SoapClient(bind, address);
c1.ClientCredentials.UserName.UserName = GetUserName();
c1.ClientCredentials.UserName.Password = GetPassword();

string value = cl.AddQuote(textBox1.Text);
引用返信 編集キー/
■97681 / inTopicNo.6)  Re[2]: soap通信を行うクライアントにてbasic認証を行いたい
□投稿者/ mofuramei (2回)-(2021/06/25(Fri) 23:48:01)
No97670 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士様返信ありがとうございます。

サンプルを頂いた事で接続する事が出来ました!
情報感謝いたします。


gitの方も合わせて更新しておきます。

検索しても情報がほとんど引っかからない為、MSDNのサンプルを手掛かりに一日中触っているだけなので
実際の情報は非常に助かります。
返信ありがとうございます。


> // soapsvtest.WebService1SoapClient cl = new soapsvtest.WebService1SoapClient();
> // string value = cl.AddQuote(textBox1.Text);
>
> var bind = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
> bind.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
> var address = new EndpointAddress(new Uri("http://soap.testsv.jp/test/WebService1.asmx"));
>
> var cl = new soapsvtest.WebService1SoapClient(bind, address);
> c1.ClientCredentials.UserName.UserName = GetUserName();
> c1.ClientCredentials.UserName.Password = GetPassword();
>
> string value = cl.AddQuote(textBox1.Text);
引用返信 編集キー/
■97697 / inTopicNo.7)  Re[3]: soap通信を行うクライアントにてbasic認証を行いたい
□投稿者/ mofuramei (3回)-(2021/07/01(Thu) 15:25:29)
No97681 (mofuramei さん) に返信
> ■No97670 (魔界の仮面弁士 さん) に返信
> 魔界の仮面弁士様返信ありがとうございます。
>
> サンプルを頂いた事で接続する事が出来ました!
> 情報感謝いたします。
>
>
> gitの方も合わせて更新しておきます。
>
> 検索しても情報がほとんど引っかからない為、MSDNのサンプルを手掛かりに一日中触っているだけなので
> 実際の情報は非常に助かります。
> 返信ありがとうございます。
>
>
>>// soapsvtest.WebService1SoapClient cl = new soapsvtest.WebService1SoapClient();
>>// string value = cl.AddQuote(textBox1.Text);
>>
>>var bind = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
>>bind.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
>>var address = new EndpointAddress(new Uri("http://soap.testsv.jp/test/WebService1.asmx"));
>>
>>var cl = new soapsvtest.WebService1SoapClient(bind, address);
>>c1.ClientCredentials.UserName.UserName = GetUserName();
>>c1.ClientCredentials.UserName.Password = GetPassword();
>>
>>string value = cl.AddQuote(textBox1.Text);
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ