具有Azure Active Directory而不是Keycloak或Okta的JHipster

时间:2018-10-09 18:46:37

标签: azure azure-active-directory jhipster

我想开发一个SaaS应用程序并将其部署在Azure上。因为业务逻辑不会那么复杂,所以我想用作JHipster入门套件。该应用程序将具有两种类型的用户:想要使用Office 365帐户登录到该应用程序的“办公室”用户和想要使用其社交帐户(例如Google或Facebook)或只是创建一个新的本地帐户的“普通”用户。所有帐户都应由Azure管理,并且不应在我们的数据库中存储任何密码。

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

关于JHipster的第二条:是否可以配置JHipster来针对AAD对用户进行身份验证?在有关创建JHipster应用程序的身份验证的问题中,我应该选择哪个选项?

关于Azure的第三条:如果“办公室”用户可以将我们的SaaS应用添加到Office 365主屏幕中的应用列表中,那将是很好的。有可能吗?

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

关于, 雅西克

2 个答案:

答案 0 :(得分:1)

先决条件:您需要在天蓝色的租户中注册您的应用,并获取客户端ID和机密。 Register App

在您的application.yml文件中,此类设置将使您连接到天蓝色广告。

# ===================================================================
# 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;
}

答案 1 :(得分:0)

对图形API的调用不是GET而是POST?在以后的jhipster版本中是否对此进行了更改?如果是这样,则需要做更多的工作来更改操作。另外,我不认为user-info-uri:https://graph.windows.net/me?api-version=1.6端点会为您提供用户角色(AD组),您无需再次拨打电话。当然,这取决于内部配置IDP的方式。