認証にASP.NETログインコントロールを使用しています。ASP.NETメンバーシップ - 同じWebAppでWebServiceを呼び出すと、認証されたユーザーが失われる
私はいくつかのユーザーがおり、ログインに成功しています。認証されると、helloworld.aspxというページにリダイレクトされます。 Page_Loadメソッドでは、まずMembership.GetUser()を呼び出します。これにより、認証されたユーザーが適切に返されます。次に、同じWebアプリケーションにある単純なWCF Webサービスを呼び出します。私のWebService呼び出しの最初の行は同じMembership.GetUser()です。今度はNULLを返します。
どのような考えですか?ここで
おかげで、 ジャスティン
は、以前のサービスのソースコード述べたように、いくつかのコードが
JustinPage.aspx
public partial class JustinPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
MembershipUser user = Membership.GetUser();
// user is a valid user
JustinService.JustinTestServiceClient justin = new CMS.WEB.JustinService.JustinTestServiceClient();
justin.DoWork();
}
}
JustinTestService.svc.cs
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class JustinTestService
{
[OperationContract]
public void DoWork()
{
MembershipUser user = Membership.GetUser();
// user is NULL ??? Why?
return;
}
}
スニペットですJustin.aspxと同じWebアプリケーションにあります私のアプリケーションはポート19003で固定されています)。
エンドポイントアドレス= "http:// localhost:19003/Services/JustinTestService.svc" binding = "basicHttpBinding" bindingConfiguration = " BasicHttpBinding_JustinTestService」 契約= "JustinService.JustinTestService" 名前= "BasicHttpBinding_JustinTestService" 結合/
また、このような結合ルックス...
<名= "BasicHttpBinding_JustinTestService" です。CloseTimeout = "00:01:00" openTimeout = "00:01:00" receiveTimeout = "00:10:00" sendTimeout = "00:01:00" allowCookies = "false" をbypassProxyOnLocal = "false" をhostNameComparisonMode = "StrongWildcard" のMaxBufferSize = "65536" maxBufferPoolSize = "524288" maxReceivedMessageSize = "65536" messageEncoding = "テキスト" textEncoding = "UTF-8" transferModeは= "バッファ" useDefaultWebProxy = "true" を> < readerQuotas MAXDEPTH = "32" maxStringContentLength = "8192" maxArrayLength = "16384" maxBytesPerRead = "4096" maxNameTableCharCount = "16384"/> <セキュリティモード= "なし" > < /セキュリティ> </binding >
多分<セキュリティモード= "なし"と関係があります> ???
HRMのような
何か... [OK]を合意しました。私は意図的にこれをやっていました。なぜなら私はすべてのクライアントが通信する共通の契約を作りたいからです。私はこのWebAppに同じアプリケーションに常駐しているという理由だけで、ビジネスレイヤへの特別なアクセス権を与えたくありません。すべてのクライアントアプリケーションは同じAPIを使用する必要があります。推奨されるソリューションは、直接サービスに電話することですか?私はすでにこの作品を知っているが、間違っている可能性がありますので一貫しているようにしていた – Justin
現在ログインしているユーザーの資格情報を取得してWebサービスに送信することができますが、安全であるかどうかはわかりません。 Webサービスは外部に公開されているのか、内部だけに公開されていますか? – pgb