我正在开发一个门户,并且有这样的场景:
-
用户进入 ASP.Net Core 2 Razor Pages Web 门户,使用 Facebook 注册或登录
-
在主页 index.cshtml 上,有 HTML 和一个简单的 VueJS,属性为 {{ Account.Total }}
-
VueJS 带来了这个 Account.Total value from a Azure Function using Axios Javascript library https://myfunctionapp.azurewebsites.net/api/GetAccountTotal?AccountId=ABC。
-
用户还登录 UWP 和移动 Xamarin.Forms 应用
-
在 Xamarin.Forms 中制作的移动应用程序也调用此 Azure 函数来获取 Account.Total
-
UWP 应用还会调用此 Azure 函数来获取帐户。
这个想法是,ASP.Net 核心只是一个客户端,如UWP和Xamarin应用。Azure Functions 将是后端,就像 Web API 一样;Microsoft图Facebook身份验证将保护所有这些并识别用户。
Azure函数需要使用相同的图形/Azure AD B2C 身份验证。用户只需在 ASP.Net Razor 页面上登录一次,所有相关服务和调用都必须读取这些凭据。
如何配置,以及需要什么代码来执行此操作 登录并验证Microsoft 图形 B2CFacebook 用户帐户跨 ASP Net Core2、VueJS 和 Azure Functions C# 预编译(v1 和 v2)?
所有这些看起来都很明显,但经过几天的尝试,我将在这里发布步骤。 (将编辑此答案以提供更多详细信息)
但最重要的最难找到的部分(按顺序)是:
1)在我添加额外的登录参数后它工作了
"additionalLoginParams": ["response_type=code id_token", "resource=<app_id>"]
在 https://resources.azure.com/
在页面顶部,选择"读/写"。 在左侧浏览器中,导航到订阅>资源组>>提供程序> Microsoft.Web>站点>>配置>身份验证设置。
单击编辑。
修改以下属性。替换为要访问的服务的 Azure Active Directory 应用程序 ID。
2)在 ASP.Net Core 2上,您输入登录和注销:
<a href="~/.auth/login/aad?post_login_redirect_url=/Index">LOGIN</a><br />
<a href="~/.auth/logout?post_logout_redirect_uri=/Bye">LOGOUT</a><br />
您可以要求
string UserName = (string)Request.Headers["X-MS-CLIENT-PRINCIPAL-NAME"];
string UserId = (string)Request.Headers["X-MS-CLIENT-PRINCIPAL-ID"];
string Token = Request.Headers["X-MS-TOKEN-AAD-ID-TOKEN"];
3) 然后在 JavaScript 上,必须调用发送授权标头持有者令牌的 Azure 函数
function WhoAmI() {
var Token = "@ViewData["Token"]";
var url = "https://MyFUNCTION.azurewebsites.net/api/WhoAmI";
var headers = { headers: { "Authorization": `Bearer ${Token}` } };
//if (Token == "") headers = null;
axios.get(url,
headers
).then(response => {
console.log("WhoAmI()");
console.log(response.data);
});
}
来源: https://learn.microsoft.com/en-us/azure/app-service/app-service-authentication-how-to#refresh-access-tokens
也许我还需要使用 0) ADAL.NET (Microsoft.IdentityModel.Clients.ActiveDirectory)