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

OAuth 2.0、Azure AD和OpenId Connect

殳睿
2023-03-14

我仍在试图理解使用ASP的OAuth2.0流。Net核心2.0。由Microsoft提供的默认代码(见下文)可以与使用OAuth 2.0和OpenId Connect的Azure AD身份验证很好地配合使用。

我实际上正在测试授权代码流。

我正在尝试更改下面的代码,以便它不使用OpenId Connect,而是使用普通OAuth。(您可能想问为什么,我正在与之合作的供应商还不支持OpenId Connect)。

所以我需要使用普通OAuth来启用使用Azure AD的授权代码流。

 services.AddAuthentication(auth =>
            {
                auth.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                auth.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;

            })
            .AddCookie()

            .AddOpenIdConnect(opts =>
            {
                Configuration.GetSection("Authentication").Bind(opts);

                opts.Events = new OpenIdConnectEvents
                {
                    OnAuthorizationCodeReceived = async ctx =>
                    {
                        HttpRequest request = ctx.HttpContext.Request;
                        //We need to also specify the redirect URL used
                        string currentUri = UriHelper.BuildAbsolute(request.Scheme, request.Host, request.PathBase, request.Path);
                        //Credentials for app itself
                        var credential = new ClientCredential(ctx.Options.ClientId, ctx.Options.ClientSecret);

                        //Construct token cache
                        ITokenCacheFactory cacheFactory = ctx.HttpContext.RequestServices.GetRequiredService<ITokenCacheFactory>();
                        TokenCache cache = cacheFactory.CreateForUser(ctx.Principal);

                        var authContext = new AuthenticationContext(ctx.Options.Authority, cache);

                        //Get token for Microsoft Graph API using the authorization code
                        string resource = "https://bupaau.onmicrosoft.com/4fa4b4a7-d34f-49af-8781-c8b39f0cf770";
                        AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(
                            ctx.ProtocolMessage.Code, new Uri(currentUri), credential, resource);

                        //Tell the OIDC middleware we got the tokens, it doesn't need to do anything
                        ctx.HandleCodeRedemption(result.AccessToken, result.IdToken);
                    }
                };
            });

如何关闭openId连接并为授权代码流启用普通OAuth身份验证。

-艾伦-

共有1个答案

子车勇锐
2023-03-14

通过使用范围参数值来指定此项。对于OpenID Connect,范围值设置为openid。这就是规范对授权请求的描述。

但是你需要注意一些Azure广告的细节。这在Azure广告文档中突出显示。对于OpenID Connect,

当web应用程序需要对用户进行身份验证时,它必须将用户定向到/authorizeendpoint。此请求类似于OAuth 2.0授权代码流的第一段,但有几个重要区别:

  • 请求必须在scope参数中包含scope openid
  • 响应类型参数必须包含id\u令牌
  • 请求必须包括nonce参数

这里还有OAuth2.0文档的链接。您可能不会简单地删除OpenID连接特定参数以获得OAuth 2.0响应,因为可能存在特定于实现的需求。

 类似资料:
  • connect(“outlook.office365.com”,“my_email_id,access_token”);//这里的存储是imap 我设置的属性是:properties.put(“mail.smtp.port”,“587”);SetProperty(“mail.imap.socketFactory.class”、“javax.net.ssl.sslsocketFactory”);Se

  • OAuth 2.0 OAuth 2.0(Open Anthentication) 是一个 开放标准授权, 它授予客户端应用程序安全授权访问受保护的服务器资源代表资源所有者(用户).Oauth2.0 还定义了资源拥有者授权的第三方访问其服务器资源过程,不予它们共享证书. StrongLoop API网关附带实现的OAuth 2.0协议,并提供元数据的持久性和管理一个OAuth 2.0提供者。 下图提

  • 基于JFinal3.x,jfinal-ext3 , japp-lanucher, dubbo, 参考RFC6749实现了4.节描述的内容。 实现了OAuth 2.0定义了四种授权方式 授权码模式(authorization code): 先获取下次请求token的code,然后在带着code去请求token; 简化模式(implicit):直接请求token; 密码模式(resource owne

  • 基于JFinal,jfinal-ext3 参考RFC6749实现了4.节描述的内容。   实现了OAuth 2.0定义了四种授权方式   授权码模式(authorization code): 先获取下次请求token的code,然后在带着code去请求token; 简化模式(implicit):直接请求token; 密码模式(resource owner password credentials)

  • 我有一个 ASP.Net 5 Web API,它使用Microsoft.identity.Web软件包进行保护,因此它由Azure Active Directory支持。API本身中的身份验证工作正常,没有任何问题。 想获得在Swagger UI内部工作的授权的时候很纠结。我正在使用授权代码流,起初一切似乎都很好(我进入Microsoft登录屏幕,可以输入我的凭据并接收授权代码)。 这是我的Sta

  • 问题内容: 我正在建造一个。我必须为系统构建。 根据我的研究,我认为我需要使用构建基于的身份验证系统和承载令牌。 在阅读了很多有关如何构建OAuth2.0服务器的OAuth2.0的知识之后,我仍然感到困惑,并且对是否需要它或是否需要其他身份验证系统感到困惑。 我的系统需要的是,我们将为所有客户提供服务,每个客户都将拥有一个,并且使用SDK客户端将连接到我们系统中存在的他的应用程序。 在将客户他的申

  • 我想在我的JAX-RS RESTful服务上实现OAuth2.0授权。 经过一些研究,我找到了Apache CXF来做这件事。但是,我还没有找到任何关于它的例子,对我来说也不清楚。在哪里可以找到一些使用OAuth2.0的JAX-RS示例?

  • 我正在使用AzureAd Powershell模块进行用户管理。但是,它并不具备我所需要的所有功能,特别是,我不能为对象分配应用程序扩展值(尽管我可以通过创建删除和删除应用程序扩展本身)。 通过观察使用Fiddler的API调用,我知道graph调用使用了承载令牌,并且我直接从Postman手动调用了graph API,所以如果可以的话,我知道如何使用承载令牌。我怎么拿到?