我正在尝试在Xamarin 跨平台移动应用程序上实施身份验证和识别,该应用程序使用的是来自我的WebApi服务的数据。
我的目标如下:
让移动应用程序针对各种Identity Providers执行身份验证,获取安全令牌,并将其传递到请求标头内的WebApi服务。
然后,该服务将实施DelegatingHandler
到validate the token,并从中提取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。
如果有人已经处理过这种情况,请分享您的经验并告诉我什么是正确的方法。
如果我的目标首先是错误的,那么也要毫不犹豫地批评它。
答案 0 :(得分:2)
您是否正在使用Windows Azure移动服务(WAMS)后端?看起来你有自己的与WAMS无关的API。
如果您想使用WAMS只是为了能够为您提供JWT并通过Twitter / FB&实时(他们支持的IdP),然后你只需要使用一个知道如何处理WAMS令牌特性的令牌处理程序。 (This doc显示他们如何签署JWT)。
可以使用ACS,但它们也具有有限数量的IdP(虽然比WAMS更多),当然,您的API必须考虑不同的令牌格式。
在我们编写的这两个教程中,您可以看一下我们的这种集成方法。它们面向我们自己的身份平台,但他们使用的SDK是开源的,您可以查看它们的工作方式(查找指向GitHub存储库的链接)。
评论你的#3。并非所有IdP都能够发布JWT。您需要一个中介来为您生成(例如ACS,像我们这样的服务等)。在客户端代码中生成令牌并不是一个好主意,因为客户端代码通常是“不可信任”的。 (并且secrets
未存储在设备中)。