Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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
C# Asp.Net核心Web Api中的Azure广告挑战;我自己的JWT持有人_C#_Asp.net_Authentication_Jwt_Azure Active Directory - Fatal编程技术网

C# Asp.Net核心Web Api中的Azure广告挑战;我自己的JWT持有人

C# Asp.Net核心Web Api中的Azure广告挑战;我自己的JWT持有人,c#,asp.net,authentication,jwt,azure-active-directory,C#,Asp.net,Authentication,Jwt,Azure Active Directory,我需要先注册Azure AD,然后从JWT令牌(令牌数据段中包含的邮件/名称/组等)获取用户信息,这是我在登录时获得的,并在WebApi中进行验证 然后检查邮件是否已注册: 如果不是:使用内部api UserManager创建新帐户 如果是:登录用户并使其从内部WebApi承载(服务)获得JWT令牌 关键是要在JS前端去掉Azure AD JWT令牌。一旦用户单击“使用Azure AD登录”按钮,后端应该像我前面描述的那样采取行动。 成功登录后,前端应使用我的Web Api生成JWT令牌,以

我需要先注册Azure AD,然后从JWT令牌(令牌数据段中包含的邮件/名称/组等)获取用户信息,这是我在登录时获得的,并在WebApi中进行验证

然后检查邮件是否已注册:

  • 如果不是:使用内部api UserManager创建新帐户
  • 如果是:登录用户并使其从内部WebApi承载(服务)获得JWT令牌
关键是要在JS前端去掉Azure AD JWT令牌。一旦用户单击“使用Azure AD登录”按钮,后端应该像我前面描述的那样采取行动。 成功登录后,前端应使用我的Web Api生成JWT令牌,以便在前端组件内进行授权

总结一下:我真正想要的是以下方法:

  • 执行此所谓的“挑战”(重定向到Azure AD登录页面)
  • 成功登录后重定向到前端
  • 在中获取Azure AD JWT令牌(作为字符串或JwtSecurityToken实例) 后端在我的Api中再次验证并处理它
  • 我已经在Azure上设置了广告并注册了应用程序。在Startup.cs文件中,我“声明”了名为“Azure”的JwtBearer身份验证方案和我自己的名为“Inner”的JwtBearer身份验证方案,而且我为它们中的每一个都制定了授权策略

    我想到的是创建一个注定要引发挑战的端点,然后使用新的JWT令牌与我希望的用户登录

    services.AddAuthentication()
    .AddJwtBearer(“InnerJwt”,选项=>
    {
    })
    .AddJwtBearer(“AzureJwt”,选项=>
    {
    var authSettings=Configuration.GetSection(“AzureAd”).Get();
    options.Audience=authSettings.ClientId;//配置[“AzureAd:ClientId”];
    options.Authority=authSettings.Authority;//配置[“AzureAd:Authority”];
    });
    //clientId、租户和授权机构已在appsettings.json文件中等待
    services.AddAuthorization(选项=>
    {
    options.DefaultPolicy=新授权PolicyBuilder()
    .RequireAuthenticatedUser()文件
    .AddAuthenticationSchemes(“InnerJwt”)
    .Build();
    options.AddPolicy(“内部”,新的AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()文件
    .AddAuthenticationSchemes(“InnerJwt”)
    .Build());
    options.AddPolicy(“Azure”,新授权PolicyBuilder())
    .RequireAuthenticatedUser()文件
    .AddAuthenticationSchemes(“AzureJwt”)
    .Build());
    });
    
    我遇到的一个错误是Challange()

    公共任务登录()
    {
    回击(
    新的AuthenticationProperties{RedirectUri=”“},
    “AzureJwt”);
    }
    
    即使我正在使用Microsoft.AspNetCore.{Mvc,Authentication}和这些包的最新引用,也无法识别该方法-我不明白

    编辑:

    好吧,我太蠢了,忘了从ControllerBase继承那个控制器,因此ControllerBase.Challenge()方法没有重新编码。 现在它可以工作了,但当我设法按正确的路线“调用”此操作时,它会在我的web浏览器中返回一个401未授权错误,而不是将我引导到Azure AD sing in站点:/

    我应该换一种方式吗

    希望这是我想要实现的足够信息,如果没有,我会在以后添加它


    感谢您抽出时间……

    您能解决这个问题吗?