我正在尝试在Xamarin跨平台移动应用程序上实施身份验证和标识,该应用程序使用来自WebApi服务的数据。
我的目标如下:
让移动应用程序针对各种Identity Providers执行身份验证,获取安全令牌,并将其传递到请求标头中的WebApi服务。
然后,该服务将对validate the token实施DelegatingHandler
,并从中提取userId,以供以后标识和授权。
我希望我的客户代码尽可能地可共享!
我的选项AFAIK如下:
使用Azure Mobile Services在客户端上生成联合安全令牌,并在WebApi服务上验证令牌。感谢this SO answer,我认为这是有可能的。得益于Xamarin Azure Mobile Services Components,客户端上的代码共享看起来很有希望。
使用Azure Access Control Service(ACS)在客户端上生成联合安全令牌,并在WebApi服务上验证令牌。但是,我不认为在客户端上使用ACS可以很容易地代码共享。此外,ACS并不是城里的新手。
使用Xamarin.Auth component直接针对身份提供者进行客户端身份验证,生成JWT安全令牌,并在WebApi服务上对其进行验证。这样应该可以从IdP中访问用户数据。但是,此组件当前缺少Windows Phone支持和It's not likely it will be available before late fall。
如果有人已经处理过这种情况,请分享您的经验,并让我知道正确的方法。
如果我的目标最初是错误的,请不要犹豫,也要批评它。
最佳答案
您是否正在使用Windows Azure移动服务(WAMS)后端?看起来您有自己的与WAMS无关的API。
如果您只是想使用WAMS来提供JWT并通过Twitter / FB&Live(其受支持的IdP)进行身份验证,那么您只需要使用知道如何处理WAMS令牌特质的令牌处理程序即可。 (This doc显示了他们如何签名JWT)。
可以使用ACS,但它们的IdP数量也有限(尽管比WAMS多),并且您的API当然必须考虑其他令牌格式。
您可以在我们编写的这2个教程中了解我们针对此类集成的方法。它们面向我们自己的身份平台,但是它们使用的SDK是开源的,您可以查看它们的工作方式(查找到GitHub存储库的链接)。
Xamarin tutorial
WebApi / MVC tutorial
对您的#3发表评论。并非所有IdP都有能力发行JWT。您需要中介来为您生成该中介(例如ACS,类似我们的服务等)。在客户端代码中生成令牌不是一个好主意,因为客户端代码通常是“不可信的”。 (和secrets
未存储在设备中)。