0

我是 WCF 和 REST 的新手,所以请原谅任何明显的问题。

我正在尝试创建一个可供客户端使用的 RESTful API。API 需要仅对经过身份验证的用户可用,所以我相信最好的方法(根据我在过去几天阅读的内容)是使用基于 SSL 的基本身份验证,这很好。

我在面向 .NET 3.5 的 VS2010 中有一个基本的 WCF REST 服务应用程序。- 这部分内容直接取自http://www.codeproject.com/KB/WCF/BasicAuthWCFRest.aspx

我正在努力理解和区分的是如何对用户进行身份验证,同时根据他们的身份限制客户可以拨打的电话。

因此,客户需要拨打的电话会将一些基本信息从他们的系统传递到我们的系统,每个客户都可以拨打相同的电话,但是我不希望客户 A 能够将信息发布到我们客户 B 的区域一边,反之亦然。

我打算让两个客户都发布类似以下网址的内容:-

api.mydomain.com/sale/

但是,我想知道这样做是否更清楚更有意义:-

api.mydomain.com/clientA/sale/ api.mydomain.com/clientB/sale/

...如您所见,我很迷茫!

此外,我拥有的示例代码正在使用自定义 MembershipProvider - 我了解 Membership 的基础知识,但同样,不知道我是否应该以某种方式使用它来限制客户将数据发布到彼此的区域?

对不起,胡扯-太多问题:(

4

2 回答 2

0

关于授权(授予对特定资源的经过身份验证的使用访问权)有几种方法。

您可以通过 web.config 中的元素限制对某些区域(目录/URL 路径)的访问<location>,然后使用该<authorization>元素仅允许某些用户或角色(组)访问这些位置。如果位置/用户/角色的数量是可管理的并且不会发生太大变化,则可以。例如:

<location path="ProtectedPlaces/Foo">
    <system.web>
        <authorization>
            <allow roles="FooGroup"/>
            <deny users="*"/>
        </authorization> 
    </system.web>
</location>

或者,在幕后,您可以使用基本上做同样事情的基于 API 的方法。有许多图书馆可以提供帮助,包括AzMan;与角色成员资格提供者属于同一“家族”的授权库;企业库中也有一个。

本文可能会有所帮助(请参阅:“第 2 步:根据当前登录的用户角色限制功能”)。

于 2011-09-01T01:34:13.763 回答
0

这是我如何做到的。我使用标准的成员资格提供程序(但您也可以对自定义成员资格提供程序执行相同操作)来验证用户身份,但我不让 IIS 这样做。我自己对用户进行身份验证(作为 REST API 的一部分)并为该用户生成一个令牌,我将其存储在成员资格数据库中并发送回客户端。

对于客户端的每个请求,它也需要发送一个有效的令牌。由于令牌与用户 ID 一起存储,因此我可以确定令牌是否有效以及发出请求的用户。因此,我可以根据我自己的安全规则确定是否允许该请求。

如果只允许用户对自己的数据进行特定请求,那么您不需要发送除令牌之外的任何识别信息。

HTH。

于 2011-09-05T14:38:32.390 回答