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



各位开发者好!

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

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

我们的目标:

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

  • 问题:Web应用程序>后端(WebApi)>ACS(使用IdentityProviders.js)>后端(WebApi)>例如,参数为"myURL"的Google身份验证>ACS(传播令牌和参数为"myURL")>我们的后端(WebApi)应将Web应用程序重定向到接收到的参数myURL,并将令牌作为查询字符串参数。如何做到这一点

谢谢!Martin

您可以在Context中传递身份验证流期间需要传播的任何信息。当您向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

查看此和此链接了解更多信息。

剩下的就是当ACS将Token发布到您的后端时,从Context中获取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;

谨致问候,Matej

最新更新