在WebApi服务中validationAzure移动服务令牌
我正在尝试在使用WebApi服务的跨平台移动应用程序上实现身份validation和身份validation。
我的计划是将身份validation导出到联合云服务,例如新的Azure移动服务。 客户端移动应用程序将使用移动服务身份validation流程,获取令牌,而不是将请求的头部发送到WebApi,然后WebApi将对其进行validation并从中提取UserId。
假设我已经使用DelegatingHandler
拦截器配置了WebApivalidationJWT令牌,是否可以validationAzure移动服务发布的令牌?
SymmetricKey,Issuer和Audience的正确值是什么?
我正朝着正确的方向前进吗?
http://www.thejoyofcode.com/Generating_your_own_ZUMO_auth_token_Day_8_.aspx上的post显示了如何生成 Azure移动服务令牌,但其中包含validation它所需的信息。 基本上,您需要用来validation它的密钥是来自服务的主密钥 (不要将该密钥分发给任何客户端,但如果它在您的服务中安全编码,那应该没问题)。 观众取决于创建令牌的提供者(例如,对于FB,它是字符串"Facebook"
)。 发行者设置为urn:microsoft:windows-azure:zumo
。
您需要在WebAPI
项目中执行的操作是实现一个自定义消息处理程序来拦截令牌并validation它是否使用来自AMS
的相同主密钥进行签名。 GitHub上有一个项目,展示了如何执行此操作:
JWTvalidation员
这基本上是另一个GitHub项目的衍生物,它在这里有原始的ASP.NET示例:
AuthenticationTokenSample
调用ValidateSignature()
方法时会发生主要validation,该方法接受JWT Claim段的UTF-8表示的字节,并使用Azure Mobile Services
的共享密钥计算它们上的HMAC SHA-256 MAC。 如果JWT加密段和先前计算的值,则确认该密钥用于在JWT上生成HMAC并且JWT索赔段的内容未被篡改。
我发现的一个主要问题是删除附加的"JWTSig"
字符串, "JWTSig"
不被附加到ValidateSignature()
方法中的主密钥。 看来签名的令牌不再将该字符串附加到AMS
的主密钥。 在删除该段之前,我遇到了各种麻烦。
- 使用HttpClient将字节数组发布到Web API服务器
- OData $ expand,DTO和Entity Framework
- 使用web api HttpResponseMessage输出图像
- 在unit testing中为ApiController设置User属性
- 如何从WebAPI中的HttpResponse对象获取错误消息?
- Web APIvalidation不会触发自定义模型绑定器
- ASP.NET Web API的dependency injection
- 使用AngularJS和ASP.NET Web API上载/下载字节数组
- System.Net.Http.HttpRequestException将内容复制到流时出错