Asp.net核心身份 - Azure身份验证中间件

时间:2018-01-27 21:59:21

标签: asp.net azure asp.net-core azure-active-directory middleware

对于Asp.net Core,是否有用于通过Azure AD进行身份验证的程序包?

例如,查询Nuget时存在以下身份验证包:

  • Microsoft.AspNetCore.Authentication.Facebook
  • Microsoft.AspNetCore.Authentication.Twitter
  • Microsoft.AspNetCore.Authentication.Google
  • Microsoft.AspNetCore.Authentication.MicrosoftAccount

我尝试使用MicrosoftAccount软件包,但在成功连接后,我从Microsoft页面收到以下错误:

SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*10 + 1); randomNumber;")
URL GOTO=http://www.iopus.com
' waits 1 to 10 seconds
WAIT SECONDS={{!VAR1}}

没有使用中间件包的examples,但中间件包提供易用性,并且更直接地与Identity框架集成。

是否存在使用Azure AD的直接包,或者无论如何指定MicrosoftAccount包应指向组织/ azure / tenant网址?

1 个答案:

答案 0 :(得分:0)

这对我有用:

authBuilder
    .AddMicrosoftAccount(Auth.Constants.AuthenticationScheme, options =>
    {
        options.ClientId = clientId;
        options.ClientId = clientSecret;
        if (tenantId != null)
        {
            var resource = "https://graph.microsoft.com";
            options.AuthorizationEndpoint = $"https://login.microsoftonline.com/{tenantId}/oauth2/authorize?resource={resource}";
            options.TokenEndpoint = $"https://login.microsoftonline.com/{tenantId}/oauth2/token?resource={resource}";
        }
    });
  • tenantId - 查看"端点"来自"应用注册的部分"刀。您可以从网址中提取,也可以直接使用这些网址,而不是我上面提到的网址。
  • clientId - 这是您的"应用程序ID"在您注册的应用程序中。
  • clientSecret - 这是您创建并在" Keys"下注册的密码。您已注册的应用程序部分。

然后,您可以使用https://graph.microsoft.com访问令牌获取更多信息,例如添加以下选项:

options.ClaimActions.DeleteClaim(ClaimTypes.Name);
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "displayName");
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "userPrincipalName");
options.Events = new OAuthEvents
{
    OnCreatingTicket = async context =>
    {
        // Get the GitHub user
        var request = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/");
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);
        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var response = await context.Backchannel.SendAsync(request, context.HttpContext.RequestAborted);
        response.EnsureSuccessStatusCode();

        var contents = await response.Content.ReadAsStringAsync();
        var user = JObject.Parse(contents);

        context.RunClaimActions(user);
    }
};