ADFS 3.0 - 扩展功能
ADFS 3.0 - Extending functionality
我目前正在实施一个包含 ADFS 3.0 和多因素身份验证的解决方案。我已按照 TechNet (https://msdn.microsoft.com/en-GB/Library/dn783423.aspx?f=255&MSPPError=-2147217396) 中的步骤设置示例适配器,效果很好。
我现在想扩展它并面临一些问题。我在网上和 Whosebug 上搜索了类似的东西,但找不到任何东西,所以我把它们都张贴在这里。不确定我是否需要将其分成不同的问题:
- 我需要扩展适配器,以便 html 的一部分由外部脚本呈现,即我需要添加一个额外的脚本,以便在呈现 adfs 适配器 html 时加载.
据我所知,可以修改主题以在 onload.js 中包含额外的 javascript,但我不想走这条路,因为脚本确实需要从外部加载。
我能想到的唯一可行的方法是在 html 中注入 javascript 以动态方式加载脚本,如下所示:
var script =document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", <my_script_loaded_over_http>)
fileref.onload =
function() {
//call script method
};
但是因为外部脚本的某些逻辑依赖于 window 的 "onload" 事件,所以它无法工作,因为它加载得太晚了..
这可能吗?
适配器是否可以注入新的响应头? (我假设不是)
是否有一种标准方法可以为适配器 dll 提供配置文件,以便可以在运行时更改某些值而无需部署新的 dll?如果不是,将上述配置文件写入 adfs 文件夹并从那里读取是否安全?
非常感谢
我自己弄明白了:
1- IAdapterPresentationForm 接口提供了一种方法 return 我想包含的任何脚本或 css:string GetFormPreRenderHtml(int lcid) 例如:
public string GetFormPreRenderHtml(int lcid){
StringBuilder sb = new StringBuilder();
sb.Append("<script src='http://myjs.js' type='text/javascript'></script>");
sb.Append("<link rel='stylesheet' type='text/css' href='http://mycss.css' />");
return sb.ToString();
}
2- 完全没有
3- 使用以下方法注册适配器时可以传递配置文件:
注册 AdfsAuthenticationProvider -TypeName $typeName -Name -Verbose -ConfigurationFilePath 。
管道将为您打开一个流,并将其传入:
void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
我目前正在实施一个包含 ADFS 3.0 和多因素身份验证的解决方案。我已按照 TechNet (https://msdn.microsoft.com/en-GB/Library/dn783423.aspx?f=255&MSPPError=-2147217396) 中的步骤设置示例适配器,效果很好。 我现在想扩展它并面临一些问题。我在网上和 Whosebug 上搜索了类似的东西,但找不到任何东西,所以我把它们都张贴在这里。不确定我是否需要将其分成不同的问题:
- 我需要扩展适配器,以便 html 的一部分由外部脚本呈现,即我需要添加一个额外的脚本,以便在呈现 adfs 适配器 html 时加载. 据我所知,可以修改主题以在 onload.js 中包含额外的 javascript,但我不想走这条路,因为脚本确实需要从外部加载。
我能想到的唯一可行的方法是在 html 中注入 javascript 以动态方式加载脚本,如下所示:
var script =document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", <my_script_loaded_over_http>)
fileref.onload =
function() {
//call script method
};
但是因为外部脚本的某些逻辑依赖于 window 的 "onload" 事件,所以它无法工作,因为它加载得太晚了..
这可能吗?
适配器是否可以注入新的响应头? (我假设不是)
是否有一种标准方法可以为适配器 dll 提供配置文件,以便可以在运行时更改某些值而无需部署新的 dll?如果不是,将上述配置文件写入 adfs 文件夹并从那里读取是否安全?
非常感谢
我自己弄明白了:
1- IAdapterPresentationForm 接口提供了一种方法 return 我想包含的任何脚本或 css:string GetFormPreRenderHtml(int lcid) 例如:
public string GetFormPreRenderHtml(int lcid){
StringBuilder sb = new StringBuilder();
sb.Append("<script src='http://myjs.js' type='text/javascript'></script>");
sb.Append("<link rel='stylesheet' type='text/css' href='http://mycss.css' />");
return sb.ToString();
}
2- 完全没有
3- 使用以下方法注册适配器时可以传递配置文件: 注册 AdfsAuthenticationProvider -TypeName $typeName -Name -Verbose -ConfigurationFilePath 。
管道将为您打开一个流,并将其传入:
void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)