【问题标题】:ADAL - ClientAssertionCertificateADAL - ClientAssertionCertificate
【发布时间】:2016-02-28 12:46:59
【问题描述】:

我们可以使用以下代码成功获取令牌:

var certificate = Certificate.Load("Client.pfx", "notasecret");
var authenticationContext = new AuthenticationContext(authority);
var clientAssertionCertificate = new ClientAssertionCertificate(clientId, certificate);
return await authenticationContext.AcquireTokenAsync(resource, clientAssertionCertificate);

令牌似乎不包含任何我们可以用来识别客户端的信息。在我们的用例中,我们有许多与 API 通信的守护程序服务客户端。我们需要在服务器上有一些唯一可用的标识。

我还尝试创建我们自己的 JWT 令牌并添加了一些公共声明,例如名称。但是在使用以下代码片段请求客户端断言类型后

var content = new FormUrlEncodedContent(new Dictionary<string, string>
             {
                 { "clientid", clientId },
                 { "resource", resource },
                 { "client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" },
                 { "grant_type", "client_credentials" },
                 { "client_assertion", jwt }
             });
             var httpClient = new HttpClient
             {
                 BaseAddress = new Uri("https://login.windows.net/{guid}/")
             };
             var response = await httpClient.PostAsync("oauth2/token", content);

返回令牌没有我的自定义信息。

问题:有没有办法使用 ClientAssertionCertificate 流传递自定义声明?其中返回的令牌有附加信息。

【问题讨论】:

    标签: jwt azure-active-directory adal


    【解决方案1】:

    目前无法在为应用程序颁发的令牌中添加自定义声明。 您收到的令牌应包含声明 appid(标识请求令牌的应用程序的 client_id)和 tid(指示应用程序在哪个 azure AD 租户上运行)。这两个应该足以让您识别调用应用程序。现在,如果不是您想要识别 进程 的应用程序(例如,在服务器 A 上运行的应用程序 X 的实例和在服务器 B 上运行的应用程序 X 的实例),那么我不相信我们有今天 Azure AD 中任何可以帮助您区分这两者的东西 - 对于 Azure AD,如果它们具有相同的 client_id 和 secret,它们就是同一个应用程序。

    【讨论】:

    • 谢谢 - 看来我需要使用我需要的声明滚动我自己的 JWT 令牌
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多