添加变量以回复Azure B2C中的URL

添加变量以回复Azure B2C中的URL,azure,azure-ad-b2c,Azure,Azure Ad B2c,我正在尝试在Azure B2C中设置重定向uri。我在Url中有一个语言字段,如下所示: https://mydomain/de-de/projects https://mydomain/en-us/projects https://mydomain/sv-se/projects https://mydomain/ar-sa/projects ... 为了正确地重定向,我必须将所有可能添加到B2C回复URL中,我最多只能添加20个 有没有办法向重定向uri添加变量? 比如: 其中“:lan

我正在尝试在Azure B2C中设置重定向uri。我在Url中有一个语言字段,如下所示:

https://mydomain/de-de/projects
https://mydomain/en-us/projects
https://mydomain/sv-se/projects 
https://mydomain/ar-sa/projects
...
为了正确地重定向,我必须将所有可能添加到B2C回复URL中,我最多只能添加20个

有没有办法向重定向uri添加变量? 比如:

其中“:lang”是一个变量,可以取任何值。

////////////////////////////////////

解决方案

棘手的解决方案是操纵状态并将返回的URL注入其中,因为它将在登录/注册响应后发送回。createLoginUrl()方法:

所以在这里,我用“url”这个词来拆分状态,这样我可以在收到响应后再次阅读它

encodeURIComponent((状态)+“url”+returnedUrl)

一个重要的URL,它应该是相同的来源:

“&redirect_uri=”+encodeURIComponent(window.location.origin)

此URL应添加到Azure B2C应用程序中返回的URL中

现在我可以在tryLogin()方法中再次拆分它:

而且它工作得很好

////-------------------------------------

编辑:1.2.2019

const statePartsWithUrl = (parts['state'] + '').split('url');
let state = '';
let returnedUrl = '';
if (statePartsWithUrl != null) {
  state = statePartsWithUrl[0];
  returnedUrl = statePartsWithUrl[1];
}

这里是在方法tryLogin(options)中拆分状态以从中读取信息

是的,因此您发现,您当前无法在B2C中添加通配符来回复URL

这可能是由于中定义的安全问题。 其中,针对开放重定向攻击的建议对策是让客户端注册完整的重定向URI

也无法通过编程方式创建应用程序:

可悲的是,目前只有手工操作。但一定要在用户语音上投票表决功能请求

实际上,我甚至尝试通过图形浏览器手动编辑应用程序:

{
    "odata.error": {
        "code": "Request_BadRequest",
        "message": {
            "lang": "en",
            "value": "Updates to converged applications are not allowed in this version."
        },
        "date": "2018-01-08T12:00:00",
        "requestId": "208e7159-d459-42ec-8bb7-000000000000",
        "values": null
    }
}

正如您在评论中所建议的,解决此问题的一种方法是使用一个静态重定向URI,并将语言/区域性保持在状态/cookie中,然后在用户返回应用程序后重定向到特定于语言的版本。

我想解决方案是设置一个静态返回URI(即域)并将状态中实际返回的Url作为json对象发送,然后在收到响应时手动重定向。哦,嘿,这是一个非常好的主意!您也可以使用cookie:)我将把它添加到答案中。我想在这种情况下不需要cookie,因为状态将完全与Url一起发送回来。更多的工作,但可以实现!:)在state参数中往返返回URL(不必在Azure AD B2C中注册)是常见的方法。有关更多信息,请参阅。你好@juunas,我在上面添加了问题的解决方案。如果你感兴趣,你可以看看。干杯您是通过Javascript方法实现的吗?我一直在试图找到一种通过OpenIdConnectAuthenticationOptions访问“state”变量的方法,但没有找到任何方法来添加信息,以便应用不同的重定向等@Samysammura使用拆分器或其他工具将信息添加到我上面提到的状态&state='+encodeURIComponent((state)+'url'+([your_data])数据您可以稍后将其拆分并从state读取请查看我的新编辑
const statePartsWithUrl = (parts['state'] + '').split('url');
let state = '';
let returnedUrl = '';
if (statePartsWithUrl != null) {
  state = statePartsWithUrl[0];
  returnedUrl = statePartsWithUrl[1];
}
{
    "odata.error": {
        "code": "Request_BadRequest",
        "message": {
            "lang": "en",
            "value": "Updates to converged applications are not allowed in this version."
        },
        "date": "2018-01-08T12:00:00",
        "requestId": "208e7159-d459-42ec-8bb7-000000000000",
        "values": null
    }
}