繁体   English   中英

使用Microsoft在线帐户进行Angular 4/5登录,而无需创建azure ad b2c应用程序并与Web API通信(.net core 2.0)

[英]Angular 4/5 login with microsoft online account without creating a azure ad b2c app and communicate with Web API (.net core 2.0)

我使用Asp.net core 2.0创建了Angular 5应用程序和Web API。 仅允许用户使用其个人Microsoft帐户登录。 要求如下。

  1. 当用户输入角度应用程序的URL时,应将其重定向到Microsoft的登录页面。
  2. 当他们成功登录后,Angular应用程序应获得访问令牌和用户的基本个人资料信息。
  3. 然后,应用程序应使用接收到的访问令牌与Web API进行通信,并且Web api应将令牌验证为有效,并以数据进行响应。

到目前为止,我已经完成了以下工作。

  • 在Microsoft应用注册门户中创建了一个应用,并获得了应用ID。
  • 添加了Web平台,并将重定向URL设置为http:// localhost:4200 ,从而允许隐式流。
  • 添加了Web API平台并获得了应用程序ID URI-api:// {application Id}

  • 从我的角度应用程序中,重定向到以下URL url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?" +"client_id=fa******c&" +"response_type=id_token+token&" +"redirect_uri=http://localhost:4200&" +"scope=openid api://fa******c&" +"response_mode=fragment&" +"state=12345&" +"nonce=678910"; url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?" +"client_id=fa******c&" +"response_type=id_token+token&" +"redirect_uri=http://localhost:4200&" +"scope=openid api://fa******c&" +"response_mode=fragment&" +"state=12345&" +"nonce=678910";

  • 在Web api startup.cs中,添加以下中间件。

     services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(jwtOptions => { jwtOptions.Authority = $"https://login.microsoftonline.com/common/v2.0"; jwtOptions.Audience = "fa*****c"; }); 

并在Configure方法中添加了app.UseAuthentication(),并在控件操作中添加了[Authorize]属性。

该应用程序正确地重定向到Microsoft登录页面,并为我提供了重定向URL的access_token。 但是,当我使用此令牌向网络api进行身份验证时,会收到401未经授权的响应。 我也考虑了到期时间。 我在这里想念什么吗?

(欢迎使用不使用azure ad b2c的任何其他方法来执行此操作)预先感谢。 (我点击了此链接https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-implicit

从Microsoft帐户页面返回的访问码不是用于访问Web api的令牌。 相反,它是从Azure AD检索用户信息的代码。 前端应使用它从Web api服务(资源服务器)请求令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM