如何进行身份验证&;授权Azure广告应用程序,使用C#WEBAPI(基于令牌)。netcore
我可以为我的.netcore MVC应用程序+reactjs(计费应用程序)进行身份验证和授权 此应用程序将托管在IIS上,并且位于计划托管.netcore Webapi的同一服务器上 (图表应用程序) 通过使用计费应用程序,我们将调用图表WebAPI。现在,WebApi应该是基于前端应用程序发送的令牌对用户进行身份验证/授权的应用程序(基于令牌的WebApi进行身份验证/授权,没有其他登录弹出窗口)如何进行身份验证&;授权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 将此令牌连同
哪种方法是正确的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来测试请求。供你参考。