我们有一个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
中的OpenIdConnectConfigurationRetriever
从OIDC
端点([authority]/.well-known/openid-configuration
(检索密钥集 - 使用
System.IdentityModel.Tokens.Jwt
中的JwtSecurityTokenHandler
读取令牌,并使用提取的签名运行验证
不需要使用任何JWT库,也不需要手动验证时间戳或签名。