来自 ADAL.net 的访问令牌是否不同于 openid

Is access token from ADAL.net different from openid

我是 openid 和 aad 的新手。

我有一个 API 调用下游图 api。 我按照下面的例子, https://joonasw.net/view/azure-ad-on-behalf-of-aspnet-core

一切正常。

但是前端是第三方app,访问我的API。

他们说他们正在使用打开的连接来验证用户。他们遵循 Auth grant flow(https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code),所以我希望有一个 JWTs 访问令牌。 但是当我尝试他们的访问令牌时,它说未经授权。 我尝试使用 jwt.ms 解码他们的访问令牌,但这也不起作用。

现在我的问题是,从 ADAL.net 身份验证获得的访问令牌与打开的身份验证不同吗? 有解决办法吗?

非常感谢任何帮助。

提前致谢。

澄清您的理论问题.. ADAL.NET 库可以帮助您从 Azure AD 获取令牌,符合 OAuth 2.0 和 OpenID 连接协议。

更具体到您的情况.. 如果访问令牌是使用您提到的授权代码授权流程获取的,并且参数正确,它应该适用于您的 API。

需要检查两件事

  1. 确保已获取访问令牌并将您的 API 指定为资源,只有这样它才对您的 API 有效。

    这是一个同样使用 openid 范围的访问令牌请求示例。Get Access Tokens

    resource 的值应与您的 Web 服务的 App ID URI 完全匹配。要查找 App ID URI,请在 Azure 门户中单击 Azure Active Directory,单击应用程序注册,打开应用程序的设置页面,然后单击属性。

    GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
    client_id=6731de76-14a6-49ae-97bc-6eba6914391e        // Your registered Application Id
    &response_type=id_token+code
    &redirect_uri=http%3A%2F%2Flocalhost%3a12345          // Your registered Redirect                 Uri, url encoded
    &response_mode=form_post                              // `form_post' or 'fragment'
    &scope=openid
    &resource=https%3A%2F%2Fservice.contoso.com%2F        // The identifier of the protected resource (web API) that your application needs access to
    &state=12345                                          // Any value, provided by your app
    &nonce=678910                                         // Any value, provided by your app
    
  2. 您可能正在获取 ID 令牌和访问令牌,请确保使用正确的令牌