当前位置: 首页 > 知识库问答 >
问题:

如何在WAAD保护的web API2中获取电子邮件

程振濂
2023-03-14

我使用的MVC5客户端通过“UseOpenIdConnectUthEntication”进行安全保护,并在Claims对象中获取所有用户的详细信息,该客户端通过“承载”认证令牌调用WAAD安全Web Api。

我需要在web API中获取用户名或电子邮件。我试过不同的选择,但都没用。

我在identity.name中得到null,我得到的其他属性如nameidentifier、objectidentifier、tenanted等。

string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
            string tenantID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
            ClientCredential clientcred = new ClientCredential(Startup.clientId, Startup.appKey);
            AuthenticationContext authenticationContext = new AuthenticationContext(Startup.aadInstance + Startup.tenantId, new ADALTokenCache(signedInUserID));
            AuthenticationResult authenticationResult = authenticationContext.AcquireToken(apiResourceId, clientcred);

            return authenticationResult.AccessToken;
app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = Authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                    UseTokenLifetime = false,
                    Notifications = new OpenIdConnectAuthenticationNotifications()
                    {
                        // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                        AuthorizationCodeReceived = (context) =>
                        {
                            var code = context.Code;
                            ClientCredential credential = new ClientCredential(clientId, appKey);
                            string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                            AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
                            AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
                            code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);
                            return Task.FromResult(0);

                        }

以下是令牌的详细信息:

共有1个答案

计均
2023-03-14

您可以通过以下方式获取当前用户的upn:

var upn = ClaimsPrincipal.Current.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn").Value;

另一种方法是使用Microsoft Graph api获取用户的基本信息,请参考OAuth2.0的代表流,它服务于一个应用程序调用一个服务/Web api,而该应用程序又需要调用另一个服务/Web api的用例。请参阅协议说明和代码示例。

更新:

AuthenticationResult authenticationResult = authenticationContext.AcquireToken(apiResourceId, clientcred);
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, new NaiveSessionCache(userObjectID));
ClientCredential credential = new ClientCredential(clientId, appKey);
result = await authContext.AcquireTokenSilentAsync(todoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
 类似资料:
  • 问题内容: 我的Android应用程序中有一个Facebook登录选项,但尝试获取用户的电子邮件失败。在用户登录并添加到Parse.com用户表(具有有效的访问令牌)之后,我请求Facebook用户信息,但仅获取其ID和名称(即使电子邮件已设置为权限之一) )。 这是我的代码(在我的按钮的OnClickListener内部): 问题答案: 我想这与Graph API v2.4中的更改有关,该更改使

  • 问题内容: 我想从IMAP4服务器获取整个邮件。在python文档中,如果发现此代码有效: 我想知道我是否总是可以相信data [0] [1]返回消息的主体。当我运行“ RFC822.SIZE”时,我只有一个字符串而不是一个元组。 我已经浏览了rfc1730,但无法弄清楚“ RFC822”的正确响应结构。也很难从imaplib文档中得知获取结果的结构。 这是我在获取时得到的: 但是当我获取时,我得

  • 我有一个Spring boot应用程序,具有与Auth0集成的角度前端。保安工作正常。但我想在spring端获得用户电子邮件, 我在endpoint中添加了以下代码 场景1:客户是邮递员。 范围=openid配置文件电子邮件 访问令牌url=https://{auth0_domain}}/oauth/token 日志: 情景2: 从角度进行测试会在第行给出空指针(jwt) System.out.p

  • 我一直试图获取电子邮件正文与imap_fetchbody($stream,$msgno,$选项),但没有成功。 然后我尝试使用imap_fetchstructure($stream,$msgno),并使用各自的子类型手动解码每种类型,如:- 对于前两个,我可以用这样的东西来解码 但说到混合,我要么不知道,要么我该怎么办,要么我在哪里犯错。

  • 在上一章中,我们学习了如何查看电子邮件。 现在让我们看看如何获​​取每封电子邮件并阅读其内容。 让我们编写一个Java类FetchingEmail ,它将读取以下类型的电子邮件: 简单邮件 电子邮件附件 使用内联图片发送电子邮件 代码中遵循的基本步骤如下: 获取Session对象。 创建POP3商店对象并连接到商店。 创建文件夹对象并在邮箱中打开相应的文件夹。 检索邮件。 分别关闭文件夹和存储对象

  • 嗨,我正在尝试从给定的令牌获取电子邮件用户。我尝试过这样来解析令牌,但根据以下示例,我总是得到空值或值: 我将令牌放在url上,就像这样localhost:8000/admin/user/get_all?token={{token},我还将令牌作为添加到头中注意:我正在使用postman发出请求。但是当我尝试将解析值传递给响应时,我总是得到值: 如果我错了,请纠正我:解析的意思是获取身份验证用户的