Silverlight Ria身份验证 - 在使用DomainContext之前检查身份验证

时间:2011-03-03 09:19:42

标签: silverlight authentication ria wcf-ria-services

我已经开始使用标准的Silverlight / RIA / EF应用程序,它正如预期的那样直接运行。

我想将整个DomainService限制为仅经过身份验证的用户,因为应用程序最终会在公共互联网上生效,并且所有数据访问都需要经过用户身份验证。

我遇到的问题是,我不能在我的Silverlight应用程序中使用自动生成的DomainContext类,除非我将所有Load方法包装在一个自定义类中,该类在尝试检索数据之前验证用户的身份验证状态 - 看起来像是一项漫长而繁琐的编码任务。

肯定有一个我错过的简单解决方案吗?

这个东西在ASP.NET中很简单,因为当您丢失(或从未拥有)身份验证时,您被重定向到登录页面(在web.config中配置)。

我真的很惊讶Silverlight中没有类似的机制,因为它似乎是一个标准的业务应用程序要求。

2 个答案:

答案 0 :(得分:2)

在DomainService中要求身份验证很容易。只需将[RequiresAuthentication]或[RequiresRole]属性添加到类(适用于所有操作)或要授权的操作。您可能会发现这些链接很有用。

How to: Enable Authentication in RIA Services

RequiresAuthenticationAttribute

答案 1 :(得分:1)

如果这是您想要的答案,我不是百分之百的父亲,如果这样做是一个好习惯,但您可以实现一个消息检查器,检查用户是否经过这样的身份验证:

public class ClientCustomHeadersDispatchMessageInspector : IDispatchMessageInspector
{

    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        if (!HttpContext.Current.User.Identity.IsAuthenticated) {
            throw new SecurityException("User not authenticated");
        }
        return null;
    }


    public void BeforeSendReply(ref Message reply, object correlationState)
    {
    }
}