【问题标题】:WCF-service: how to authorize userWCF-service:如何授权用户
【发布时间】:2011-03-12 12:03:08
【问题描述】:

WCF 服务由 ASP.NET 网站托管。网站中不使用 ASP.NET 成员资格。用户使用“自定义”页面登录,登录用户的 ID 存储在 Session (HttpContext.Current.Session) 中。

WCF 服务由 Silverlight(4 版本)应用程序使用。

如何检查当前用户(加载的 Silverlight 应用程序)是否有权访问某个 WCF 方法?

我看到几个选项:

  1. 在请求 WCF 方法期间检查 HttpContext.Current.Session 对象是否包含用户 ID。这种方法对我不起作用 (HttpContext.Current in WCF service during 2nd request)。
  2. 使用 OperationContext - 我不知道如何使用它。

请问:

一个。建议我如何解决上述任何问题;

OR(可能更好的选择)

b.建议我任何其他方法。

非常感谢。

【问题讨论】:

    标签: .net asp.net wcf silverlight silverlight-4.0


    【解决方案1】:
    1. 您可以像在 InitParameter 中一样将 HttpContext.Current.Session["YourUserID"] 传递给 Silverlight 4 应用程序;
    2. 将该值添加到应用程序资源中,以便在整个 SL 应用程序中可用;
    3. 并将其作为方法调用中的参数传递给 WCF 服务;
    4. 验证该用户是否被授权

    这是一个例子:

    对于持有您的 silverlight 控件的页面:

    protected void Page_Load(object sender, EventArgs e)  
    {  
        this.Silverlight1.InitParameters = "UserID" + HttpContext.Current.Session["UserID"];  
    }  
    

    在 App.Xaml.cs 中

    private void Application_Startup(object sender, StartupEventArgs e)  
    {  
       this.Resources.Add("UserId", e.InitParams["UserID"]);  
    }  
    

    【讨论】:

    • 而且人们应该能够轻松地通过使用 firebug 更改页面的 html 来伪造用户。
    • 我想过这种方法,只是我们还需要添加一个用户密码(在这种情况下,用户将只能使用自己的数据)......但不确定是否在 html 中传递用户凭据是个好主意。
    【解决方案2】:

    我相信您可以使用 OperationContext 并将会话 cookie 与您的 WCF 请求一起发送。在服务器端,它要么恢复正确的 HttpContext.Current.Session,要么您可以手动执行此操作。

    【讨论】:

      【解决方案3】:

      看看内置 Silverlight 4 Business 模板 - 它包含使用 WCF RIA 服务的用户的验证和授权。

      【讨论】:

      • WCF RIA 服务(重命名为 .NET RIA 服务)需要 Web 应用程序项目(但我是一个网站)...这就是我不想使用它们的原因...但可能它至少看看那里使用的是什么方法是个好主意......?
      【解决方案4】:

      这是一个魔法......现在 HttpContext.Current 在每个请求期间都是非空的......不知道为什么......如果你知道为什么这是可能的 - 请告诉我。而且我可以将它用于用户授权...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        • 2013-10-02
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        相关资源
        最近更新 更多