我想开发一个SaaS应用程序并将其部署在Azure上。因为业务逻辑不会那么复杂,所以我想用作JHipster入门套件。该应用程序将具有两种类型的用户:想要使用Office 365帐户登录到该应用程序的“办公室”用户和想要使用其社交帐户(例如Google或Facebook)或只是创建一个新的本地帐户的“普通”用户。所有帐户都应由Azure管理,并且不应在我们的数据库中存储任何密码。
第一个问题是关于Azure的:我应该使用哪种类型的AAD? B2B还是B2C?还是两者混合?
关于JHipster的第二条:是否可以配置JHipster来针对AAD对用户进行身份验证?在有关创建JHipster应用程序的身份验证的问题中,我应该选择哪个选项?
关于Azure的第三条:如果“办公室”用户可以将我们的SaaS应用添加到Office 365主屏幕中的应用列表中,那将是很好的。有可能吗?
我只有“内部部署”经验,所以也许我的问题很简单,但这是我进入任何云的第一步,在本例中是进入Azure的第一步。
关于, 雅西克
答案 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的方式。