如何从客户端密钥和开放id令牌获取访问令牌

时间:2017-03-31 08:38:30

标签: c# azure-active-directory

我有一个javascript应用程序作为我的客户端应用程序,它与后端服务器进行通信以获取信息。它们是分离的,因此当用户登录时,服务器和客户端之间没有任何身份验证通信。

我正在尝试设置服务器,以便我可以将开放的ID令牌传递给服务器,然后让服务器将https://login.microsoftonline.com/common的开放ID令牌兑换为访问令牌。

我已经使用证书(下面的代码)工作了,但是我似乎无法通过使用客户端秘密来使其工作。

moment().endOf('month')

当我为客户保密更改时,它不再有效。

var authority = "https://login.microsoftonline.com/common";

// Construct client assertion certificate
var clientAssertionCertificate = new ClientAssertionCertificate("<client_id", certificate);

var context = new AuthenticationContext(authority);

// User Assertion
var userAssertion = new UserAssertion(id_token);

authenticationResult = await context.AcquireTokenAsync("https://graph.microsoft.com", clientAssertionCertificate, userAssertion);

查看关于ClientAssertion构造函数的文档说:&#34;构造函数用于创建带有编码为base64 url​​编码字符串的jwt令牌的凭证。&#34;断言是:&#34; jwt用作凭证。&#34;。这让我觉得客户端断言需要是一个真正的json web令牌。我在这里错过了什么吗?我是否需要从我的客户端密钥中实际创建/获取JWT才能从ID令牌获取访问令牌?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当客户端想要接收访问令牌而不传输敏感信息(例如客户端密钥)时,使用JWT承载授权类型,我们通常将其用作授权代码授权中的客户端密钥的替代方案。这也可以与受信任的客户端一起使用,无需用户授权即可访问用户资源。请从here了解更多关于jwt bearer的内容。

通常,此断言类型用于从本机客户端提供的访问令牌获取下游服务的访问令牌。 (参见此处的示例:https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet)。您还可以单击here以获取Azure AD的身份验证方案。