如何通过访问控制服务将参数从客户端传递到后端

时间:2013-11-28 12:09:08

标签: c# .net authentication acs accesscontrolservice

你好开发人员了!

我们正在使用ACS进行移动和Web应用程序的用户身份验证。

问题:如何将一些上下文信息(例如1个字符串)传播给身份提供者,这些身份提供者可以返回到ACS,然后传播到我们的后端(ACS会向哪个身份验证令牌发送)?

我们的目标:

  • 工作:移动应用>后端(WebApi)> ACS(使用IdentityProviders.js)>后端(WebApi)>例如Google auth> ACS>我们的后端(WebApi)将Mobile应用程序重定向到静态Noop URL(将令牌显示为查询字符串参数)>移动应用程序检测到URL更改(在InAppBrowser中)并存储查询字符串。

  • 问题:网络应用>后端(WebApi)> ACS(使用IdentityProviders.js)>后端(WebApi)>例如使用参数“myURL”>进行Google身份验证ACS(传播令牌和参数“myURL”)> 我们的后端(WebApi)应该将Web应用程序重定向到接收参数myURL,并将令牌作为查询字符串参数。如何实现这一目标?

谢谢! 马丁

1 个答案:

答案 0 :(得分:1)

您可以在上下文中传递身份验证流程中需要传播的任何信息。当您从ACS请求身份提供者时,在上下文中添加所需的重定向URL。

例如:

https://YourNamespace.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=wsfederation&realm=YourAppRealm&reply_to=YourAppReturnURL&context=YourRedirectionURL&version=1.0&callback=OptionalFunctionName

有关详细信息,请参阅thisthis链接。

剩下的就是当ACS将令牌发布到后端时从上下文获取URL。例如(需要代码审查):

var formResult = Request.Content.ReadAsFormDataAsync().Result;
var wresult = formResult["wresult"];
var signInResponse = new SignInResponseMessage(Request.RequestUri, wresult);

var rstr = new WSFederationSerializer().CreateResponse(signInResponse,new WSTrustSerializationContext(SecurityTokenHandlerCollectionManager.CreateDefaultSecurityTokenHandlerCollectionManager()));

var redirectURL = rstr.Context;

此致 马捷