ADAL.JS-支持POST方法吗?支持正常的验证码流吗?

时间:2019-06-06 15:01:20

标签: adal adal.js

我们已经通过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"
  }

1 个答案:

答案 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