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

使用Azure Active Directory而不是Keycoat或Okta的JHipster

杜诚
2023-03-14

我想开发一个SaaS应用程序,并部署在Azure上。因为业务逻辑不会太复杂,所以我想使用JHipster作为入门套件。该应用程序将有两种类型的用户:“办公室”用户,希望使用Office 365帐户登录应用程序,以及“普通”用户,希望使用他们的社交帐户,如谷歌或脸书,或者只是创建一个新的本地帐户。所有帐户应由Azure管理,没有密码应该存储在我们的数据库中。

第一个问题是关于Azure:我应该使用哪种类型的AAD?B2B还是B2C?还是两者兼而有之?

第二个关于JHipster:有没有可能配置JHipster来针对AAD认证用户?在关于验证创建JHipster应用程序的问题中,我应该选择哪个选项?

第三点关于Azure:如果“office”用户可以将我们的SaaS应用添加到Office 365主屏幕的应用列表中,那就太好了。可能吗?

我只有“内部”的经验,所以也许我的问题很简单,但这是我进入任何云的第一步,在这种情况下是进入Azure。

问候,杰切克

共有2个答案

齐俊贤
2023-03-14

对图形API的调用不是GET而不是POST吗?这一点在后来的jhipster版本中有所改变吗?如果是这样,那么需要做更多的工作来改变操作。此外,我不认为用户信息uri:https://graph.windows.net/me?api-version=1.6endpoint为您提供了用户角色(AD组),您必须进行第二次调用。这当然取决于您的IDP是如何在内部配置的。

岳英耀
2023-03-14

先决条件:您需要在azure tenent注册您的应用程序,并获得客户端id和密码。注册应用程序

在 application.yml 文件中,此类设置应将你连接到 azure ad。

# ===================================================================
# OpenID Connect Settings. Default settings are for Azure
# ===================================================================
security:
    oauth2:
    client:
        access-token-uri: https://login.microsoftonline.com/common/oauth2/token
        user-authorization-uri: https://login.microsoftonline.com/common/oauth2/authorize
        client-id: <<yourclientid>>
        client-secret: <<yourregistry>>
        client-authentication-scheme: query
        preEstablishedRedirectUri: http://localhost:8885/login
        useCurrentUri: false
    resource:
        user-info-uri: https://graph.windows.net/me?api-version=1.6
        id:  https://graph.windows.net/

您需要更新 UserService 类方法 getUser() 以下拉正确的信息。

private static User getUser(Map<String, Object> details) {
    User user = new User();
    user.setId((String) details.get("userPrincipalName"));
    user.setLogin(((String) details.get("userPrincipalName")).toLowerCase());
    if (details.get("givenName") != null) {
        user.setFirstName((String) details.get("givenName"));
    }
    if (details.get("surname") != null) {
        user.setLastName((String) details.get("surname"));
    }
    if (details.get("displayName") != null) {
        user.setDisplayName((String) details.get("displayName"));
    }
    if (details.get("email_verified") != null) {
        user.setActivated((Boolean) details.get("email_verified"));
    }
    if (details.get("userPrincipalName") != null) {
        user.setEmail(((String) details.get("userPrincipalName")).toLowerCase());
    }
    if (details.get("langKey") != null) {
        user.setLangKey((String) details.get("langKey"));
    } else if (details.get("locale") != null) {
        String locale = (String) details.get("locale");
        if (locale.contains("-")) {
          String langKey = locale.substring(0, locale.indexOf("-"));
          user.setLangKey(langKey);
        } else if (locale.contains("_")) {
          String langKey = locale.substring(0, locale.indexOf("_"));
          user.setLangKey(langKey);
        }
    }
    if (details.get("thumbnailPhoto@odata.mediaEditLink") != null) {
        user.setImageUrl((String) details.get("thumbnailPhoto@odata.mediaEditLink"));
    }
    user.setActivated(true);
    return user;
}
 类似资料:
  • 我有一个回收站视图,用于显示项目列表。有这个android CardView类由android给出,以显示卡片布局。如果我使用相对布局并将其背景设置为白色,它的工作方式相同。此外,在CardView的情况下,我必须无论如何添加一个儿童布局,基本上包含卡内的所有视图。所以我想知道使用CardView(实际上增加了视图的层次结构)而不是直接使用普通的Layout是否有任何好处。

  • 问题内容: 我知道与此类似的问题:Pdf.js:使用base64文件源而不是url呈现pdf文件。Codetoffel很好地回答了这个问题,但是我的问题不同之处在于,通过对我的WebAPI实现的RESTful调用来检索我的PDF。让我解释… 首先,这是使用PDF.JS通过URL打开PDF的基本方法: 这很好用,但是我正在使用Angular及其服务通过我的RESTful Web API来请求PDF。

  • 问题内容: 如果某些列返回FALSE,如何显示不同的值, 例如, COLUMN“ BASIC”返回FALSE,但我需要为用户显示YES或NO。情况为FALSE,请返回NO。 问题答案: 如果是varchar或bit,则处理NULL 或者如果只是一点点 编辑:

  • 问题内容: Javascript 1.9.3 / ECMAScript5引入了DouglasCrockford等人提倡很长时间的技术。如何在下面的代码中替换为? (假设存在)。 我能想到的最好的是: 似乎没有任何优势,所以我想我没有。我可能太新古典了。我应该如何使用来创建用户“ bob”? 问题答案: 仅具有一个继承级别,您的示例可能无法让您看到的真正好处。 通过此方法,您可以轻松实现 差异继承

  • 问题内容: 每当我读到关于使用Scala的作者通常提的是演员,而应使用(此举例)。虽然我大致了解了Actor的工作原理,但我真的很想看到一个Actor的示例,该示例被用来在一段代码中替换Java的方法修饰符(这意味着它的Scala等效项- 块)。例如,修改数据结构的内部将很高兴。 这是对Actor的很好利用,还是我被误导了? 问题答案: Actor保证一次只处理一条消息,这样就不会有两个线程访问任

  • 我是说替换 只要 在班上名列前茅。对我有用。 请给出你的建议。 使用SpringJunit4ClassRunner.class而不是MockitoJunitRunner.class