有没有一种方法可以在不依赖Microsoft身份验证的情况下使用Microsoft.Identity.Web作为外部登录



我们有一个SAAS应用程序,我们想为它添加一个登录Microsoft的选项。我们可以很好地运行这些示例,但这些示例使用Microsoft的[Authorize]属性来标记自动需要登录的页面。

我们有自己的身份验证和权限系统。

我们想要的只是一个按钮";使用Microsoft登录";,启动OAuth过程,并最终获得一个经过充分验证和信任的电子邮件地址,然后继续使用我们自己的机制。我似乎找不到任何方法来处理微软的代码——它可以处理很多情况,但所有这些都是完全自动化的。

重定向到OAuth并在另一端接收id_token并不需要编写太多代码,但如果我们能够利用MS的系统,并在未来以即插即用的方式支持更多的权限,那就太好了。

答案很简单:

选项1

微软未能在正确的地方正确地记录这一点,但它出现在主aspnetcore回购中的一个示例中。

就在这里:微软样品

要点是,我们可以像许多示例一样配置您想要的身份验证方案,然后只返回一个ChallengeResult或从页面调用this.Challenge(MicrosoftAccountDefaults.AuthenticationScheme)并返回结果。

我们还可以为身份验证生命周期添加事件,比如当身份验证完成时,对其进行操作,并将其连接到我们自己的身份验证系统。我们对身份验证服务的每个.Add[Whatever]调用都执行此操作。

选项2-更加手动

  • 生成授权url很简单(并重定向(
  • 然后我们取回JWT(id_token(
  • 使用Microsoft.IdentityModel.Protocols.OpenIdConnect中的OpenIdConnectConfigurationRetrieverOIDC端点([authority]/.well-known/openid-configuration(检索密钥集
  • 使用System.IdentityModel.Tokens.Jwt中的JwtSecurityTokenHandler读取令牌,并使用提取的签名运行验证

不需要使用任何JWT库,也不需要手动验证时间戳或签名。

相关内容

  • 没有找到相关文章

最新更新