2

我正在努力将 Silverlight 网站集成到我们现有的应用程序中,并试图让登录功能正常工作。Silverlight 应用程序需要有自己的登录页面,并且登录需要利用现有的 ASP.NET 表单身份验证。作为登录过程的一部分,我们正在调用一些外部代码,因此不能使用 System.Web.ApplicationServices.AuthenticationService 公开的可编写脚本的方法。我尝试使用 FormsAuthentication.Authenticate 来执行此操作,但没有成功。有没有人对如何解决这个问题有任何想法?

4

2 回答 2

2

听起来好像您需要创建一个可以实现表单身份验证支持的包装网络服务。

这是我所做的,例如我创建了一个 WCF 服务,它具有以下接口,我的 Silverlight 客户端引用了该接口:

[ServiceContract]
    public interface IAuthenticationService
    {
        [OperationContract()]
        string Login(string username, string password, bool isPersistent);
        [OperationContract()]
        bool Logout();
        [OperationContract()]
        string IsLoggedIn();     
    }

然后在我的实现中,您可以调用自定义代码并使用表单身份验证 api,例如登录您可以:

try
            {
                //Call you external code here
                //Then use the membership provider to authenticate
                if (Membership.ValidateUser(username, password))
                {

                    FormsAuthentication.SetAuthCookie(username, isPersistent);

                }
            }
            catch (Exception ex)
            {
                Logging.LogException("Error in Login", ex);
            }

您也不需要在服务实现中的类定义上方包含以下属性以启用 asp.net 兼容,这将使您能够访问 HttpContext:

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
于 2009-07-07T08:32:02.477 回答
0

解决方案很简单。只需创建一个调用您的自定义代码的自定义成员资格提供程序。有关详细信息,请参阅MSDN 库上的这篇文章在 ASP.NET 网站上还有15 秒的完整示例和演练视频。最后,微软似乎已经发布了内置成员资格提供程序的源代码

于 2009-07-07T14:05:04.247 回答