使用 Microsoft Graph API 授予管理员同意 - Java

2024-03-29

我已经使用图形 API 创建了一个应用程序,并为它们分配了权限 - 委托和应用程序......

    ServicePrincipal servicePrincipal = graphClient.servicePrincipals(resSerPrinId)
            .buildRequest()
            .get();
    
    List<AppRole> appRoles = servicePrincipal.appRoles;
    List<PermissionScope> scopes = servicePrincipal.oauth2PermissionScopes;
    
    List<ResourceAccess> raList = new ArrayList<ResourceAccess>();
    
    for (AppRole appRole : appRoles) {
        ResourceAccess access = new ResourceAccess();
        access.id = appRole.id;
        access.type = "Role";
        raList.add(access);
    }
    
    System.out.println("Roles added...");
    
    for (PermissionScope permissionScope : scopes) {
        ResourceAccess access = new ResourceAccess();
        access.id = permissionScope.id;
        access.type = "Scope";
        raList.add(access);
    }
    
    System.out.println("Scopes added...");
    
    RequiredResourceAccess reqResAccess = new RequiredResourceAccess();
    reqResAccess.resourceAccess = raList;
    reqResAccess.resourceAppId = resSerPrinAppClientId;
    
    List<RequiredResourceAccess> rraList = new ArrayList<RequiredResourceAccess>();
    rraList.add(reqResAccess);
    
    Application application = graphClient.applications(clientAppObjId)
            .buildRequest()
            .get();
    
    application.requiredResourceAccess = rraList;
    
    graphClient.applications(clientAppObjId)
    .buildRequest()
    .patch(application);

在上面的代码中,服务端密码是资源服务主体 ID,它在清单中具有应用程序角色,并且在“公开 api”部分中具有范围...

因此,我从该资源服务主体中提取 appRoles 和 oauth2Permission 并将它们发送到客户端服务主体...

在用户界面中,我看到权限没有授予...

是否可以使用某些图形 API 授予他们管理员权限,或者手动加载这些权限,然后授予他们管理员权限...或者我是否需要始终使用 UI 来执行此操作...?


所以我们基本上有两种类型的权限 - 角色(应用程序)/范围(委派)

因此,要向您的委派权限提供“授予管理员同意”,请使用以下代码片段

GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();

OAuth2PermissionGrant oAuth2PermissionGrant = new OAuth2PermissionGrant();
oAuth2PermissionGrant.clientId = "clientId-value";
oAuth2PermissionGrant.consentType = "consentType-value";
oAuth2PermissionGrant.principalId = "principalId-value";
oAuth2PermissionGrant.resourceId = "resourceId-value";
oAuth2PermissionGrant.scope = "scope-value";

graphClient.oauth2PermissionGrants()
    .buildRequest()
    .post(oAuth2PermissionGrant);

这是文档的链接 -

现在要向应用程序权限提供“授予管理员同意”,请使用以下代码片段...

GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();

AppRoleAssignment appRoleAssignment = new AppRoleAssignment();
appRoleAssignment.principalId = UUID.fromString("33ad69f9-da99-4bed-acd0-3f24235cb296");
appRoleAssignment.resourceId = UUID.fromString("9028d19c-26a9-4809-8e3f-20ff73e2d75e");
appRoleAssignment.appRoleId = UUID.fromString("ef7437e6-4f94-4a0a-a110-a439eb2aa8f7");

graphClient.servicePrincipals("9028d19c-26a9-4809-8e3f-20ff73e2d75e").appRoleAssignedTo()
    .buildRequest()
    .post(appRoleAssignment);

这是文档的链接 -

您必须在这里使用这两个坏男孩,然后就完成了 - 只需使用正确的 Id(不要将客户端 id 与客户端主体 id 等混淆)

基本上流程是 - 获取所有权限(使用所需资源访问权限加载两种类型 - 然后使用上面的代码将管理员授予添加到所有权限。希望这有帮助。如果您需要更多帮助,请发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Microsoft Graph API 授予管理员同意 - Java 的相关文章

随机推荐

  • 如何使用 iMagick 将一个图像叠加在另一个图像之上

    概述 我得到了两张图片 背景图像分辨率为 1920x1080p 叠加图像可以为任何小于 1920x1080p 的分辨率 背景图片 1920x1080 叠加图像 任何小于 结果图像 1920x1080 我试图将覆盖图像精确地覆盖在背景图像的中
  • 推荐的 Twig 文件扩展名

    Twig 模板有推荐的文件扩展名吗 我已经看到了以下使用情况 并希望与大多数其他开发人员保持一致 myTemplate html twig myTemplate twig myTemplate html myTemplate tmpl 通常
  • 如何使用jquery为第一个列表项应用活动类

    div class accordion ul class navigation li Lorem li li Ipsum li li Donor li ul ul class navigation li Test li li Demo li
  • 未找到“google-api-python-client”发行版,并且 pyinstaller 的应用程序需要该发行版

    我目前正在尝试使用 pyinstaller 构建一个应用程序 我收到了错误The google api python client distribution was not found and is required by the appl
  • 为什么我的 git 无法通过 gitolite 使用 git-daemon 推送到我的服务器

    当我使用 gitolite 时 忽略git daemon 我可以这样做git clone git xxx xxx 但是当我推送项目时 它显示了错误 Total 2 delta 0 reused 0 delta 0 remote Empty
  • 在python中将进度值发送到进度条

    在我的游戏中我有两个模块 岛 py它将岛屿加载到我的游戏中 第二个模块是gui py它在游戏开始之前处理 GUI 小部件 我的问题是如何将 island py 模块中的进度值发送到中创建的进度栏gui py module 编辑 还可以使用加
  • Google Appengine 游标

    我正在使用两者ndb and search api我的 python appengine 项目中的查询 我能找到的关于游标的唯一官方文档 https cloud google com appengine docs python datast
  • Java:CopyOnWriteArrayList 与 SynchronizedList

    有什么区别CopyOnWritearraylist and Collections synchronizedList 什么时候应该优先选择其中一个 CopyOnWriteArrayList当读取次数远远超过写入次数时 应使用列表 这是因为您
  • 特殊字符问题

    如何更改 Android 上的字体以允许显示 或 等特殊字符 实际上包含这些字符的字符串存储在sqlite数据库中 当您将文本加载到您的TextView 这对你有用吗 textView setText new String textFrom
  • 在字符串 Objective-c 中连接字符串

    我想将一个字符串放在一个字符串中 基本上是伪代码 first part of string varying string third part of string 我怎样才能在 Objective C 中做到这一点 有没有办法在 obj c
  • Erlang:如何从体内引用匿名函数?

    In Erlang http en wikipedia org wiki Erlang programming language 有没有办法引用当前正在执行的函数 这对于产生无限循环很有用 spawn fun gt do something
  • Azure 搜索和破折号

    我正在使用 Azure 搜索并尝试对文档执行搜索 看起来好像是这样做的 indexes blah docs api version 2015 02 28 search abc 1003 返回与此相同的结果 indexes blah docs
  • 在 OpenSceneGraph 中创建球体(使用 osg::Geometry)

    我花了相当长的时间才使其正常工作 但我的球体无法显示 使用以下代码来实现我的功能 使用 Visual C 在 Opengl 中创建 3D 球体 https stackoverflow com questions 5988686 creati
  • 禁用 jQuery 移动按钮

    我正在尝试禁用此按钮 a Next a 单击事件不应触发 并且按钮 UI 还应反映按钮禁用状态 我尝试过以下方法 next attr disabled true next attr disabled disabled next button
  • 如何处理管道中的$null

    我的 PowerShell 代码中经常遇到以下情况 我有一个返回对象集合的函数或属性 或者 null 如果将结果推入管道 则还可以处理管道中的元素 如果 null是唯一的元素 例子 Project Features Foreach Obje
  • Python Xpath:lxml.etree.XPathEvalError:谓词无效

    我正在尝试学习如何抓取网页 在教程中我使用下面的代码抛出此错误 lxml etree XPathEvalError Invalid predicate 我正在查询的网站是 不要评判我 它是训练视频中使用的网站 https itunes ap
  • Visual Studio 2015 的 Git 问题

    我在使用 TortoiseGit 版本 1 8 16 0 git 版本 2 6 2 windows 1 创建的 git 存储库中有一个 Visual Studio 解决方案 我刚刚将 Visual Studio 从 2015 年更新到 20
  • 将解密的文件读入 ZipInputStream 有时会截断第一个文件

    我正在开发一个电子阅读器应用程序 使用skyepub https skyepub net 基本上将加密的书籍下载到文件系统中 并将解密密钥保存在数据库中 当用户尝试阅读它时 它将书籍加载到内存中并解密 问题是有些书的第一章被截断了 epub
  • 带有预检请求的 CORS 帖子

    我正在尝试使用 CORS 将文件上传到不同域上的服务 但由于来源被拒绝 它们一直失败 据我所知 正在使用正确的标头来允许此操作 JavaScript 请求 var xhr new XMLHttpRequest xhr open POST h
  • 使用 Microsoft Graph API 授予管理员同意 - Java

    我已经使用图形 API 创建了一个应用程序 并为它们分配了权限 委托和应用程序 ServicePrincipal servicePrincipal graphClient servicePrincipals resSerPrinId bui