azure active directory:从url/querystring隐藏id_令牌

wpx232ag  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(638)

我正在使用adal angular js库adal angular进行身份验证,以生成令牌。登录并重定向时,令牌会像下面这样附加到querystring中https://localhost:8800/index.html#id_token=eyj0exaioijkv1qilcjhb...
为什么会发生这种情况,我应该如何避免url上的令牌?
我已经检查了这个问题并尝试了解决方案,但它对我不起作用。我所做的一切都是错的?有人能帮我吗?
这是我使用的代码,

app.js

var app = angular.module('app', [
  'ngRoute', 
  'AdalAngular',
]);

app.config([
  "$routeProvider",
  "$locationProvider",
  "adalAuthenticationServiceProvider"
  function (
    $routeProvider,
    $locationProvider,
    adalProvider
  ) {
      $locationProvider.hashPrefix("");
      adalProvider.init(configuration_object, $httpProvider);

     $routeProvider
     .when("/abcd", {
        templateUrl: urlBase + "abcd.html" + version,
        controller: "abcdCtrl",
        requireADLogin: true,
      })
     .otherwise({
        redirectTo: "/login",
      });
}

loginCtrl.js

angular.module("app").controller("loginCtrl", [
  "adalAuthenticationService",
  function (
    adalService
  ) {
        adalService.login();
    }
  }
mpgws1up

mpgws1up1#

令牌在查询字符串中返回,因为adal angular使用隐式授权,其中令牌直接从授权端点返回,而不是由应用程序从令牌端点获取。
要从URL中隐藏它们,您需要使用pkce的授权码grant。只有较新版本的msal.js才支持此流,这里有一个Angular Package :https://www.npmjs.com/package/@天蓝/微升角。您还需要将回复URL更改为单页应用程序平台,以便支持此更新的流。如果您想了解此流程的工作原理,文档中提供了一些详细信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow. 本质上,url中只传递授权代码,令牌通过来自前端的http请求从令牌端点获取。
请注意,在这两个流中,令牌对应用程序的用户仍然可见,因为代码在他们的计算机上运行:)

相关问题