Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何进行身份验证&;授权Azure广告应用程序,使用C#WEBAPI(基于令牌)。netcore_C#_Authentication_Azure Active Directory_Asp.net Core Webapi_Azure Ad B2b - Fatal编程技术网

如何进行身份验证&;授权Azure广告应用程序,使用C#WEBAPI(基于令牌)。netcore

如何进行身份验证&;授权Azure广告应用程序,使用C#WEBAPI(基于令牌)。netcore,c#,authentication,azure-active-directory,asp.net-core-webapi,azure-ad-b2b,C#,Authentication,Azure Active Directory,Asp.net Core Webapi,Azure Ad B2b,我可以为我的.netcore MVC应用程序+reactjs(计费应用程序)进行身份验证和授权 此应用程序将托管在IIS上,并且位于计划托管.netcore Webapi的同一服务器上 (图表应用程序) 通过使用计费应用程序,我们将调用图表WebAPI。现在,WebApi应该是基于前端应用程序发送的令牌对用户进行身份验证/授权的应用程序(基于令牌的WebApi进行身份验证/授权,没有其他登录弹出窗口) 能够通过请求下面的链接生成令牌 {{tenadid}}/oauth2/token 将此令牌连同

我可以为我的.netcore MVC应用程序+reactjs(计费应用程序)进行身份验证和授权 此应用程序将托管在IIS上,并且位于计划托管.netcore Webapi的同一服务器上 (图表应用程序

通过使用计费应用程序,我们将调用图表WebAPI。现在,WebApi应该是基于前端应用程序发送的令牌对用户进行身份验证/授权的应用程序(基于令牌的WebApi进行身份验证/授权,没有其他登录弹出窗口)

  • 能够通过请求下面的链接生成令牌

    {{tenadid}}/oauth2/token

  • 将此令牌连同标头发送到Web API,Web API将具有与计费应用程序相同的Azure AD应用程序配置(客户端id、范围等)。 Api应该验证令牌并发送图表数据

  • 应该在reactjs so中尝试adal/msal,并用Authorize属性修饰WebAPI,以便处理身份验证和授权
  • 有很多链接,但很少有代码不起作用,很少有进程对Azure不起作用,也很少有代码庞大且不是我想要的

    基本上,我将在.netcore中托管一个应用程序,该应用程序执行身份验证部分,现在WebApi也应该使用相同的用户cookie/令牌进行身份验证,因为我不想再弹出另一个登录窗口,请参阅大量MS示例代码,但运气不佳


    哪种方法是正确的1或2,并共享示例代码/链接任何感谢的帮助,

    根据我的理解,您有一个名为Billing app的客户端应用程序,它将通过基于用户的访问令牌登录用户并调用API。 如果是这样,您应该注册两个应用程序,一个用于计费的客户端应用程序和一个服务端应用程序。对于客户端应用程序,由于这是客户端,您应该使用用户凭据从Azure AD获取,而不是应用程序客户端机密。要实现此功能,您应将其配置为Azure AD上的公共客户端,并启用访问令牌和ID令牌:

    由于您希望获取服务端应用程序的调用API,您应该在下面授予权限,以确保用户可以通过您的客户端应用程序获取访问令牌(假设“stanapitest”这里是服务端应用程序): 注意,请单击“授予Devchat管理员许可”按钮完成权限授予流程。 完成此过程后,您可以通过密码流获取基于用户的访问令牌:

    或者Oauth2隐式授权流,当然取决于您的需求

    好了,现在是服务端演示.net核心Api的时候了,让我们在VS中创建一个简单的.net核心Api项目:

    创建项目后,将客户端id更改为您的服务应用程序id:

    运行该项目并调用其API,如您所见,它已受Azure AD保护:

    使用基于用户的访问令牌调用此API:


    正如你所看到的,它是例外的。希望能有帮助。如果您有任何进一步的问题,请随时通知我。

    在Billing app中进行身份验证后,当您想要获取访问令牌以访问另一个web api应用程序时,您可以使用
    acquireTokenSilent
    方法(msal.js)调用,该方法发出静默请求(无需使用UI提示用户)到Azure AD以获取访问令牌。Azure广告服务然后返回一个包含用户同意范围的访问令牌,以允许您的应用程序安全地调用API

    最好将您的web api作为受AAD保护的独立资源,在您的前端react应用程序中,您可以使用
    acquireTokenSilent
    获取令牌,以便在用户登录后访问web api:

    // if the user is already logged in you can acquire a token
    if (msalInstance.getAccount()) {
        var tokenRequest = {
            scopes: ["user.read", "mail.send"]
        };
        msalInstance.acquireTokenSilent(tokenRequest)
            .then(response => {
                // get access token from response
                // response.accessToken
            })
            .catch(err => {
                // could also check if err instance of InteractionRequiredAuthError if you can import the class.
                if (err.name === "InteractionRequiredAuthError") {
                    return msalInstance.acquireTokenPopup(tokenRequest)
                        .then(response => {
                            // get access token from response
                            // response.accessToken
                        })
                        .catch(err => {
                            // handle error
                        });
                }
            });
    } else {
        // user is not logged in, you will need to log them in to acquire a token
    }
    

    感谢如此详细的评论,问题是我不想再弹出一个登录窗口,因此发送用户Id和密码以获取令牌有点困难,因为用户已经在计费应用程序中输入了凭据(使用AAD凭据登录)。任何其他方式,我可以验证在.netcore webapi?Hi@Azure Core中从邮递员屏幕下方获得的令牌吗?如果用户已经拥有一个访问令牌,而资源是您的服务应用程序,则无需再次获得另一个令牌,您可以使用该令牌直接调用您的API,我只想在此处演示一个漏洞过程。如果您想验证令牌,这篇文章将对您有所帮助:好的,那么使用msal我应该在头中获取并发送令牌,我的WebApi是否会使用令牌进行身份验证/授权?此外,在postman中使用此步骤生成的令牌也可以使用,而不是使用msal?请求您共享详细步骤/日志URL,这取决于web api中的令牌验证设置,在react中,您可以获取用于访问web api的令牌并传入标头。Msal仅帮助发出授权/令牌请求,您还可以使用postman来测试请求。供你参考。