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

时间:2018-01-08 15:36:25

标签: azure azure-ad-b2c

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

https://mydomain/de-de/projects
https://mydomain/en-us/projects
https://mydomain/sv-se/projects 
https://mydomain/ar-sa/projects
...

要正确重定向,我必须为B2C回复网址添加所有可能性,我最多只能限制为20。

有没有办法将变量添加到redirect_uri? 类似的东西:

  

https://mydomain/:lang/projects

其中":lang"是一个可以取任何价值的变量。 enter image description here

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

解决方案

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

let url = that.loginUrl
                        + '?response_type='
                        + response_type
                        + '&client_id='
                        + encodeURIComponent(that.clientId)
                        + '&state='
                        + encodeURIComponent((state) + 'url'  + returnedUrl)
                        + '&redirect_uri='
                        + encodeURIComponent(window.location.origin)
                        + '&scope='
                        + encodeURIComponent(that.scope);

所以在这里我将状态分为' url'所以我可以在回复之后再读一遍。

  

encodeURIComponent((state)+' url' + returnedUrl)

一个重要的细节redirect_uri,它应该是同一个来源:

  

'&安培; REDIRECT_URI =' + encodeURIComponent(window.location.origin)

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

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

const statePartsWithUrl = (parts['state'] + '').split('url');
window.location.href = statePartsWithUrl[1];

它完美无缺。

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

编辑:1.2.2019

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

以下是在方法tryLogin(options)

中拆分状态以从中读取信息

1 个答案:

答案 0 :(得分:2)

是的,当您发现时,您目前无法添加通配符来回复B2C中的网址。

这可能是由OAuth 2.0 Threat Model and Security Considerations RFC中定义的安全问题引起的。 其中,建议的针对Open Redirect Attacks的反措施是让客户注册完整的重定向URI。

也无法以编程方式创建应用:https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/19975480-programmatically-register-b2c-applications

很遗憾,手动方式是目前唯一的方法。但请务必在用户语音上提升功能请求。

我实际上甚至试图通过Graph Explorer手动编辑应用程序:

{
    "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中,然后重定向到特定于语言的版本用户返回应用程序后。