跨平台的ServiceStack身份验证

8
什么是下列身份验证解决方案的最佳架构方式?
我有一个独立的(未与MVC集成的)ServiceStack REST服务层,该服务是所有数据的入口。客户端上没有存储任何数据。
我有多个客户端(ASP.Net MVC 4站点、MonoTouch应用程序、MonoDroid应用程序、Silverlight应用程序、MonoMac应用程序等)。
我想在服务级别提供身份验证(Facebook、Twitter等),包括将用户存储在MongoDBAuthRepository中,但允许客户端提供登录UI(我需要这样做吗?)。例如,对于MVC站点,我希望将远程ServiceStack身份验证服务(包括Facebook、Twitter)与MVC的身份验证系统集成。似乎实际身份验证应在服务端发生,但客户端需要保留身份验证响应。
我已阅读了wiki,查看了SocialBootstrap,并阅读了论坛,但仍然不清楚如何在分布式环境下使用此方法。
1个回答

5

如果您使用Twitter + Facebook等OAuth选项进行身份验证,应在浏览器中进行身份验证,因为它们每个都需要从各自的授权提供程序进行重定向,以捕获每个用户的受信任验证。一些移动应用程序通过嵌入Twitter + FB Auth的浏览器小部件来实现此目的。

一旦用户在同一身份验证会话中使用Twitter + Facebook和凭据进行了身份验证, ServiceStack的AuthProviders 会自动将所有Auth信息合并到同一个帐户中。因此,稍后您将能够使用1个auth提供程序登录,但可以访问所有3个提供程序上可用的信息。 SocialBootstrapApi项目提供了一个示例。


1
我缺少的部分是,如果我在浏览器上进行FB / Twitter身份验证(因此,在客户端(mvc /移动设备等)上进行身份验证),那么我如何将该身份验证传递到ServiceStack远程服务? - Rob Gibbens
1
ServiceClient只需要指定ss-pid cookie即可,该cookie可以通过使用BasicAuth/DigestAuth隐式分配,也可以通过直接调用/auth/*服务显式分配。否则,您可以将cookie物理添加到ServiceClient中,它只是一个base62编码的AuthSessionId guid。 - mythz
4
好的,我一直在努力让它起作用,但我认为我仍然缺少一些东西。用户在手机上登录Twitter/Facebook,然后尝试注册我的ServiceStack服务或访问需要身份验证的服务。在服务上使用什么身份验证提供程序?传递哪些参数?设置什么密码?http://imageshack.us/a/img84/5415/servicestackoauthfromcl.png http://imageshack.us/a/img607/5415/servicestackoauthfromcl.png - Rob Gibbens
6
我和Rob面临同样的情况,感到很困惑。如果我在客户端(例如通过JavaScript)使用Twitter/FB进行OAuth验证,那么我需要在C#客户端中添加什么来传递这些凭据以访问安全服务? - pjacko
你对这两个问题有更多的信息吗?我也在尝试使用我的ServiceStack网站对我的移动应用程序进行身份验证,但是我对此过程感到困惑... - toregua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接