我们已经通过ADAL.js库成功实现了身份验证。我们正在尝试使用它来针对ADFS进行身份验证。成功通过身份验证后,我们无法要求任何索赔/角色。有人告诉我这个问题是“如果repsonse_mode是形式或片段,则ADFS仅允许隐式授予。” 我想知道是否有一种方法可以修改代码以支持POST发送到ADFS(而不是GET)? 图书馆似乎使用了隐式流程-它可以支持普通的验证码流程吗? 还有其他解决此问题的建议吗?
我们可以将重定向请求发送到ADFS,作为GET请求到达。认证后,将通过重定向URL成功接收用户信息和访问令牌。但是似乎没有办法提示ADFS包括用户的角色/声明。
尝试使用配置上的变化将不同的参数传递给ADFS,但没有一个足以强制包含角色/声明:
private _config = {
instance: "xxxx",
tenant: "xxxx",
clientId: "xxxx",
redirectUri: "xxxx",
postLogoutRedirectUri: "xxxx"
, extraQueryParameter: "ResourceId=xxxx"
}
答案 0 :(得分:1)
似乎有一种解决方法可以让您强制执行此操作:
在adal.js中,进行以下更改:
/**
* Initiates the login process by redirecting the user to Azure AD authorization endpoint.
*/
AuthenticationContext.prototype.login = function (loginStartPage) {
// Token is not present and user needs to login
...
// var urlNavigate = this._getNavigateUrl('id_token', null) + '&nonce=' + encodeURIComponent(this._idTokenNonce);
// Force the response as a POST
var urlNavigate = this._getNavigateUrl('id_token', null) + '&response_mode=form_post&nonce=' + encodeURIComponent(this._idTokenNonce);
请参阅:https://medium.com/the-new-control-plane/the-mystery-of-the-missing-adfs-jwt-claims-7658d9cdeaac