【问题标题】:How to get user token with Azure AD app with MSAL.net?如何使用带有 MSAL.net 的 Azure AD 应用程序获取用户令牌?
【发布时间】:2022-10-07 16:46:08
【问题描述】:

我在我的应用程序中使用 MSAL.net。我已经在 Azure Active Directory 中注册了我的应用程序,并完成了所需的其余配置。

在我的 Web API 中,我有一些端点调用来获取登录用户的令牌。

现在,如果我想使用 MSAL.net 库在 .NET Core 中的后端应用程序中获取用户令牌,哪种方法可以帮助我获取用户令牌?

我将如何获得用户的令牌? MSAL 的哪种方法将返回用户令牌?

我想将该用户令牌用于下游 API 调用

    标签: azure-active-directory msal azure-ad-graph-api azure-authentication


    【解决方案1】:

    您需要使用MSAL.NET 获取用户令牌来调用Web API,它会缓存它。如果您正在构建公共客户端应用程序并想要获取令牌,请先调用 AcquireTokenSilent,然后再调用 AcquireTokenByUsernamePassword。在该应用程序中,不会频繁调用 AcquireTokenByUsernamePassword 并静默获取令牌。

    参考文档 - https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki

    谢谢

    【讨论】:

      【解决方案2】:

      除了 MSAL 方面,为了获取访问令牌以传递给 API,您必须请求 scope

      【讨论】:

        【解决方案3】:

        通常,用户访问令牌(用于访问资源/API 的令牌)是通过代表用户从前端应用程序注册的应用程序获得的。如果您希望(中间)API 代表用户检索访问令牌并调用下游 API,您可以使用OAuth 2.0 On-Behalf-Of flow. 查看this sample,了解如何使用 MSAL 实现它。不用担心有桌面客户端,重要的部分是中下游API。

        此外,请查看这些示例以了解标准场景:

        【讨论】:

        • var token = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);这是获取用户令牌的正确方法吗?
        • 另一种方式 userAssertion = new UserAssertion(userAccessToken.ToString().Replace("Bearer ", ""), "urn:ietf:params:oauth:grant-type:jwt-bearer"); var result = await application.AcquireTokenOnBehalfOf(scopes, userAssertion).ExecuteAsync();字符串 accessToken = result.AccessToken;所以哪个是正确的
        • 两者都是正确的,但用于不同的目的。首先将获得一个用户访问令牌。第二个将使用前者为使用 OBO 流的下游 api 获取新的。
        猜你喜欢
        • 2021-03-02
        • 2019-04-07
        • 2021-12-26
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 2020-10-16
        • 2021-10-23
        相关资源
        最近更新 更多