PDA

View Full Version : مشکل در فراخوانی سرویس های خارجی



xamfia
دوشنبه 28 اردیبهشت 1388, 00:52 صبح
مشکلی که من برخورد کرده ام در فراخوانی توابع وب سرویس دیگر سایت ها با استفاده از جاوااسکریپت می باشد.
اینطور که من فهمیده ام گویا مرورگرها اجازه اینکار را نمی دهند یعنی ما نمی توانیم از سرویس های دیگر سایت ها مستقیما در صفحات وب خودمان استفاده کنیم!!
البته گویا در Ajax .net جدید کنترلی به نام Bridge منتشر شده که این مشکل را حل کرده.
اگر کسی تجربه دارد لطفا راهنمایی کند.

reza_ghahary
شنبه 06 تیر 1388, 10:02 صبح
مطمئنا آدرس وب سرویس و یا آرگومانهای آن را کامل وارد نکرده ای
وگرنه هیچ مشکلی نداره من امتحان کردم

xamfia
شنبه 06 تیر 1388, 13:09 عصر
دوست من اين مشكلي كه من مي گم يه كم وخيم تر(!) از اون چيزي كه تو ذهن شماست.
problem calling external web service اين عبارات روي توي Google جستجو كنيد شايد چيز بدرد بخوري گيرتون اومد.

Saeed_m_Farid
سه شنبه 09 تیر 1388, 11:02 صبح
اینطور که من فهمیده ام گویا مرورگرها اجازه اینکار را نمی دهند یعنی ما نمی توانیم از سرویس های دیگر سایت ها مستقیما در صفحات وب خودمان استفاده کنیم!!
البته گویا در Ajax .net جدید کنترلی به نام Bridge منتشر شده که این مشکل را حل کرده.
اگر کسی تجربه دارد لطفا راهنمایی کند.
دوست عزیز،
اگه منظورتون رو در مورد "فراخوانی سرویس های خارجی" درست متوجه شده باشم؛ این ماهیت وب سرویس ها در Authentication یا Authorize نمودن یا به عبارت دیگه حق دسترسی هست که باعث میشه نتونید به وب سرویس موردنظر دستیابی داشته باشید. معمولاً تو استفاده از وب سرویس ها یه Credential با هماهنگی توسعه دهنده وب سرویس موردنظر که نوع Authenticate رو تعیین کرده، در هنگام initial کردن داده میشه که مقدمات حق دسترسی به وب سرویس موردنظر فراهم بشه ...

دوست من اين مشكلي كه من مي گم يه كم وخيم تر(!) از اون چيزي كه تو ذهن شماست.
problem calling external web service اين عبارات روي توي Google جستجو كنيد شايد چيز بدرد بخوري گيرتون اومد.
من مقاله وب سرویس (http://barnamenevis.org/forum/showthread.php?t=152755) شما رو یه نگاه گذرا انداختم (گذرا به علت کمبود وقت)، در اولین فرصت دقیق مطالعه اش می کنم، ولی اگه اشتباه نکنم، شما چیزی در مورد حق دسترسی به وب سرویس ها نذاشته بودید.
همین امکان هست که باعث میشه یه وب سرویس خارجی (External) در مقابل حملات دوام بیاره، چون زیاد در مورد وب سرویسهای مبتنی بر جاوا اطلاع ندارم نمیدونم چطور باید این امر تو استفاده از وب سرویس اعمال بشه ولی تو وب سرویسهای مبتنی بر دات نت یه نمونه کد واسه authentication میذارم و این در صورتی هست که authentication mode روی Windows تنظیم نشده باشه یعنی مثلاً یکی از "Forms", "Passport" و "None" باشند (درصورت تنظیم شدن با مقدار Windows در Web.config خود IIS مسئولیت احراز هویت کاربران رو از طریق (Basic, Digest, or Integrated Windows) برعهده میگیره)، امیدوارم مفید واقع بشه :
Imports System.Net
Imports System.Text

Public Class MyAuthenticationModule
Implements IAuthenticationModule

Private m_myAuthType As String = "Basic"

Public Function Authenticate(ByVal challenge As String, ByVal request As WebRequest, ByVal credentials As ICredentials) As Authorization Implements IAuthenticationModule.Authenticate

Dim myHttpWebRequest As HttpWebRequest = request
Dim myIndex As Integer = challenge.ToLower().IndexOf(m_myAuthType.ToLower() )

If (-1 = myIndex) Then Return Nothing 'Basic authentication was not the MyChallenge.

Dim myDomain As String = credentials.GetCredential(request.RequestUri, m_myAuthType).Domain
Dim myUserName As String = credentials.GetCredential(request.RequestUri, m_myAuthType).UserName
Dim myPassword As String = credentials.GetCredential(request.RequestUri, m_myAuthType).Password

Debug.WriteLine("Authentication module is invoked for " & myDomain & "\" & myUserName)

Dim myAuthBytes() As Byte = Encoding.ASCII.GetBytes(myDomain & "\" & myUserName & ":" & myPassword)

Dim myAuthString As String = System.Convert.ToBase64String(myAuthBytes)

Return New Authorization(m_myAuthType & " " & myAuthString, True, "myAuth")

End Function

Public ReadOnly Property AuthenticationType() As String Implements IAuthenticationModule.AuthenticationType
Get
Return m_myAuthType
End Get
End Property

Public ReadOnly Property CanPreAuthenticate() As Boolean Implements IAuthenticationModule.CanPreAuthenticate
Get
Return False
End Get
End Property

Public Function PreAuthenticate(ByVal request As WebRequest, ByVal credentials As ICredentials) As Authorization Implements IAuthenticationModule.PreAuthenticate
Return Nothing
End Function
End Class
موفق باشید

xamfia
یک شنبه 14 تیر 1388, 10:34 صبح
سپاسگزارم دوست من.
پاسخ های مفیدی بود.
اگر امکان دارد کد را به صورت سی شارپ قرار دهید.

Saeed_m_Farid
یک شنبه 14 تیر 1388, 12:27 عصر
سپاسگزارم دوست من.
پاسخ های مفیدی بود.
اگر امکان دارد کد را به صورت سی شارپ قرار دهید.
کد #C برای پیاده سازی احراز هویت :

using System;
using System.Net;
using System.Text;

namespace MyAuthenticationModule
{
public class MyAuthenticationModule : IAuthenticationModule
{
private string _authType = "Basic";

public Authorization Authenticate(String challenge, WebRequest request, ICredentials credentials)
{
HttpWebRequest httpWebRequest = request as HttpWebRequest;

int index = challenge.ToLower().IndexOf(_authType.ToLower());
if(-1 == index)//Basic authetication was not the challenge.
{return null;}

String domain = credentials.GetCredential(request.RequestUri, _authType).Domain;
String username = credentials.GetCredential(request.RequestUri, _authType).UserName;
String password = credentials.GetCredential(request.RequestUri, _authType).Password;



byte[] authBytes = System.Text.Encoding.ASCII.GetBytes(domain + "\\" + username + ":" + password);
String authString = Convert.ToBase64String(authBytes);

return new Authorization(_authType + " " + authString, true, "myAuth");
}

public Authorization PreAuthenticate(WebRequest request, ICredentials credentials)
{return null;}

public String AuthenticationType
{get{return _authType;}}

public bool CanPreAuthenticate
{get{return false;}}
}
}
همونطورکه می بینید در حالت Basic استفاده میشه ...

روش قدم به قدم برای پیاده سازی، پیکربندی و تست Authentication رو که از پیاده سازی IAuthenticationModule استفاده کرده؛ رو میتونید اینجا (http://support.microsoft.com/kb/318786) ببینید.

xamfia
دوشنبه 15 تیر 1388, 21:02 عصر
بازهم ممنون فقط این لینکی که گذاشتین کار نمی کنه.

Saeed_m_Farid
چهارشنبه 17 تیر 1388, 09:30 صبح
بازهم ممنون فقط این لینکی که گذاشتین کار نمی کنه.
لینک چک شد و مشکلی نداره، اگه باز هم به مورد برخوردین :


http://support.microsoft.com/kb/318786
یا "HOW TO: Create An IAuthenticationModule by Using Visual C# .NET" گوگل کنید.

موفق باشید

najva82
یک شنبه 10 بهمن 1389, 15:00 عصر
لینک چک شد و مشکلی نداره، اگه باز هم به مورد برخوردین :


http://support.microsoft.com/kb/318786
یا "HOW TO: Create An IAuthenticationModule by Using Visual C# .NET" گوگل کنید.

موفق باشید


اگر امکان داره توضیحی در مورد چگونگی استفاده از این کد در برنامه های windows application بدین.