我正在尝试在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? 类似的东西:
其中":lang"是一个可以取任何价值的变量。
////////////////////////////////////
解决方案
棘手的解决方案是操纵状态并将其与返回的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)
中拆分状态以从中读取信息答案 0 :(得分:2)
是的,当您发现时,您目前无法添加通配符来回复B2C中的网址。
这可能是由OAuth 2.0 Threat Model and Security Considerations RFC中定义的安全问题引起的。 其中,建议的针对Open Redirect Attacks的反措施是让客户注册完整的重定向URI。
很遗憾,手动方式是目前唯一的方法。但请务必在用户语音上提升功能请求。
我实际上甚至试图通过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中,然后重定向到特定于语言的版本用户返回应用程序后。