当前位置: 首页 > 知识库问答 >
问题:

OAuth 2.0身份验证代码授予流程vs客户端凭据授予流程

公西飞鸾
2023-03-14

我们有一个第三方移动应用程序。它在登录过程中创建一个访问令牌,以使用授权码授权流访问我们的API(.netcore)之一。

https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code

该移动应用程序显示了许多互动程序。登录后,当用户单击其中一个互动程序时,我想调用另一个。netcore API(使用访问令牌)。

我计划在第二个API调用中使用客户端凭据流,因为它不需要用户交互。

https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-oauth2-client-creds-grant-flow

但是APIendpoint(在代码中)检查声明以获取用户ID,并且客户端凭据流创建一个没有用户信息的jwt令牌(因为没有用户交互)。

我是否使用了正确的流程?单击互动程序时(无需用户交互),是否有方法使用授权代码授权流?

共有1个答案

龙洛城
2023-03-14

您只能在使用需要用户交互的身份验证代码流时获取用户信息。

我注意到您正在使用v1。0endpoint,可以将api uri放入资源参数中。v1不需要范围参数。0终结点。您可以在登录后以静默方式获取访问令牌。

下面是代码片段供您参考。

 // Because we signed-in already in the WebApp, the userObjectId is know
                string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;

                // Using ADAL.Net, get a bearer token to access the TodoListService
                AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
                ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);
                result = await authContext.AcquireTokenSilentAsync(AzureAdOptions.Settings.TodoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

                // Retrieve the user's To Do List.
                HttpClient client = new HttpClient();
                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, AzureAdOptions.Settings.TodoListBaseAddress + "/api/todolist");
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
                HttpResponseMessage response = await client.SendAsync(request);

参考:

active directory dotnet webapp webapi openidconnect aspnetcore

 类似资料:
  • 我可以使用,其中一个keycloak客户机与另一个keycloak客户机通信。然而,只有当我登录到第一个keycloak客户机时,它才起作用,即它向keycloak服务器发送客户机ID、客户机机密、用户名和密码。如果我没有在第一个客户机上使用用户和密码进行身份验证,我会得到“无法设置授权头,因为没有身份验证原则”。但是我已经将keycloak配置为对第一个客户机使用服务帐户(客户机凭据授权),因此

  • 我正在尝试使用 Keycloak 作为 Azure AD 的标识代理,为后端服务使用客户端凭据授予。我还需要将来自外部 IdP 的访问令牌存储在 Keycloak 中,以便从 MS 图形 API 检索组信息。我有这个用例使用授权代码流为机密客户端工作,但我无法让它与客户端凭据授予一起使用。 我在Keycloak中创建了一个“机密”客户端,启用了“服务帐户”。我还在Azure AD中创建了一个应用程

  • 我正在玩这里描述的客户端凭据授予流https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365 这是我最初的授权申请:https://login.microsoftonline.com/common/oauth2/authorize?nonce = c43a 377 e-8b

  • 本文向大家介绍oauth 客户证书授予,包括了oauth 客户证书授予的使用技巧和注意事项,需要的朋友参考一下 示例 资源

  • 我们必须在我的客户项目中集成OAuth2.0授权代码授予。目前,该应用程序使用本地登录页面。我们需要删除该页面,并将未登录的用户重定向到AS登录页面,。在AS end成功登录后,我们将被重定向到配置的。此时,我的客户端应用程序将如何知道用户已在AS登录?如何在客户端维护会话?另外,我需要用和访问令牌交换auth代码,并将其用于后续的服务器API调用。那么如何实现这一点并将令牌作为标头发送呢? 应用

  • 我是这方面的新手,读了很多之后,我觉得我不太明白如何在Keycloak中实现授权代码流。我的疑惑: > < li> 在创建了支持此流程的客户端后,如何执行凭据验证?默认情况下,如果我不做任何配置,我会得到一个登录表单。如果我在浏览器中打开这个html,并填写用户和密码字段,当我按下按钮时,它会将我发送到一个类型为.../realm/{ REAL _ NAME }/log in-actions/au