Sau*_*nri 5 c# azure-functions
我正在使用经过 Azure AD 身份验证的 Azure 函数。部署在 Azure 上时一切正常。
public static async Task<IActionResult> ExportT(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ClaimsPrincipal principal,
ILogger log)
{
var c = principal.Claims.Select(x => x.Value);
return new OkObjectResult(c);
}
Run Code Online (Sandbox Code Playgroud)
返回 :
[ "38a1e83b-c1d3-4fd7-bdc6-ef2447", "https://sts.windows.net/635e38ef-108e-4a26-b718-bbd532/", "1564501257", "1564501257", "1564505157", "42FgYFCuNWnL3ROWG9x3p4EzN3+c/6u8Gh5jV7sT0A", "pwd", "test", "test", "92.169.93", "test", "36fbab-425b-9d65-b2425ef3d9bf", "a1c1ee35-67ab-4f3a-2877c5580b1e", "ES_SALARIED", "XboeusxsxyvnjhCT_vJHkzncPE2JBU58Q50", "635e38ef-26-b718-bbd960991532", "testdedev@ins.coop", "testdedev@ins.coop", "PJ0vEo70o0G__HrwX8ghAA", "1.0" ]
Run Code Online (Sandbox Code Playgroud)
但是当使用 VS2019 在本地执行时,我得到:
[ "Admin" ]
Run Code Online (Sandbox Code Playgroud)
任何想法 ?
问候,
我能找到的最接近的方法是使用此存储库中的这些示例(在撰写本文时提交)。
在示例 AuthenticationService 中,我context.User = claimsPrincipal;在验证声明后添加了该服务。
从那里,我可以对我的 HTTP 触发器执行以下操作:
[Authorize]
[FunctionName("AuthTest")]
public async Task<IActionResult> AuthTest(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "test")] HttpRequest req)
{
// Current user identity returned
// (quickly thrown together as you get a circular reference error when converting to JSON):
return new OkObjectResult(
req.HttpContext.User.Identities.Select(x =>
new {
Claims = x.Claims.Select(y => new
{
y.Type,
y.Value,
y.Issuer,
y.Properties
}),
x.Name,
x.Actor,
x.AuthenticationType,
x.NameClaimType
})
);
}
Run Code Online (Sandbox Code Playgroud)
如果您有访问令牌,则可以GET: http://localhost:7071/api/test在标头中使用 JWT 令牌。
例如:
您还需要
这没有使用“简单身份验证”。我选择这种方法是因为我想使用支持 AAD V2 的MSAL.NET 。我发现 AAD V2 尚不支持:
目前,Azure 应用服务和 Azure Functions 不支持 AAD V2(包括 MSAL)。请查看更新。 参考号
我经历了一场真正的斗争才走到这一步。如果您需要在应用程序投入生产之前测试应用程序,那么简单的身份验证似乎不是一个选择。即使在这个答案之后,我也不知道如何使授权像普通的 Web API 策略方法一样简单。
| 归档时间: |
|
| 查看次数: |
5533 次 |
| 最近记录: |