我已经开始使用标准的Silverlight / RIA / EF应用程序,它正如预期的那样直接运行。
我想将整个DomainService限制为仅经过身份验证的用户,因为应用程序最终会在公共互联网上生效,并且所有数据访问都需要经过用户身份验证。
我遇到的问题是,我不能在我的Silverlight应用程序中使用自动生成的DomainContext类,除非我将所有Load方法包装在一个自定义类中,该类在尝试检索数据之前验证用户的身份验证状态 - 看起来像是一项漫长而繁琐的编码任务。
肯定有一个我错过的简单解决方案吗?
这个东西在ASP.NET中很简单,因为当您丢失(或从未拥有)身份验证时,您被重定向到登录页面(在web.config中配置)。
我真的很惊讶Silverlight中没有类似的机制,因为它似乎是一个标准的业务应用程序要求。
答案 0 :(得分:2)
在DomainService中要求身份验证很容易。只需将[RequiresAuthentication]或[RequiresRole]属性添加到类(适用于所有操作)或要授权的操作。您可能会发现这些链接很有用。
答案 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)
{
}
}